2015-02-03 4 views
0

Обсуждение принадлежит проекту. Когда я пытаюсь изменить обсуждение, я получаю следующую ошибку. param is missing or the value is empty: discussion на следующий кусок кода в discussions_controller:Rails: параметр отсутствует или значение пуст: обсуждение

def discussion_params 
    params.require(:discussion).permit(:title, :description) 
end 

Я не могу видеть, что случилось с этим же. Что-то не так с моей маршрутизацией, или я что-то упускаю?

discussions_controller.rb

class DiscussionsController < ApplicationController 

    before_action :find_project, expect: [:destroy] 

    def new 
    @discussion = Discussion.new 
    end 

    def create 
    @discussion = @project.discussions.build(discussion_params) 
    if @discussion.save 
     redirect_to new_project_discussion_path(@project) 
    end 
    end 

    def edit 
    @discussions = @project.discussions.find(discussion_params) 
    end 

    def update 

    if @discussions.update_attributes(discussion_params) 
     redirect_to new_project_discussion_path 
    else 
     render "edit" 
    end 
    end 

    def destroy 
    @discussions.destroy 
    redirect_to new_project_discussion_path 
    end 


    private 

    def discussion_params 
    params.require(:discussion).permit(:title, :description) 
    end 

    def find_project 
    @project = Project.find(params[:project_id]) 
    end 

end 

projects_controller.rb

class ProjectsController < ApplicationController 

    def index 
    @projects = Project.all 
    end 

    def show 


    end 

    def new 
    @projects = Project.new 

    end 

    def create #no view 
    @projects = Project.new(project_params) 
    if @projects.save 
     redirect_to projects_path, :notice => "Your project was sent!" 
    else 
     render "new" 
    end 
    end 

    def edit 
    @projects = Project.find(params[:id]) 
    end 

    def update #no view 
    @projects = Project.find(params[:id]) 

    if @projects.update_attributes(project_params) 
     redirect_to projects_path, :notice => "Your project has been updated." 
    else 
     render "edit" 
    end 
    end 

    def destroy #no view 
    @projects = Project.find(params[:id]) 
    @projects.destroy 
    redirect_to projects_path, :notice => "Your project has been deleted." 
    end 

    private 
    def project_params 
    params.require(:project).permit(:title, :description) 
    end 


end 

(обсуждение) _form.html.erb

<%= form_for [@project, @discussion] do |f| %> 
    <div class="container"> 

    Project: <%= @project.title %> <%= link_to "Go back?", projects_path %> 
    <hr> 
    <div class="form-group"> 
     <%= f.label :title %> 
     <%= f.text_field :title, class: "form-control" %> 
    </div> 

    <div class="form-group"> 
     <%= f.label :description %> 
     <%= f.text_area :description, class: "form-control" %> 
    </div> 

    <div class="form-group"> 
     <%= f.submit "Submit discussion", class: "btn btn-primary" %> 
    </div> 
    </div> 
<% end %> 

(обсуждение) edit.html.erb

<%= render "form" %> 

(дискуссии) new.html.erb

<div class="container"> 
    <div class="page-header"> 
    <h1>Discussions<small> Discuss the project.</small></h1> 
    </div> 
</div> 


<%= render "form" %> 


<% if [email protected]? %> 
    <% for item in @project.discussions %> 
    <div class="container"> 
    <div class="panel panel-default"> 
    <div class="panel-heading"> 
    <%= item.title %> 
    </div> 
    </div> 
    <div class="panel-body"> 
    <p> 
    <%= item.description %> <br> 
    <%= link_to "Comment", new_discussion_comment_path(item) %> 
    <%= link_to "Delete", item, :method => :delete %> 
    <%= link_to "Edit", edit_project_discussion_path(@project, item) %> | 
    </p> 
    </div> 
    </div> 
    <% end %> 
<% end %> 

А вот мои маршруты для обеих дискуссий и проектов.

project_discussions GET /projects/:project_id/discussions(.:format)    discussions#index 
         POST /projects/:project_id/discussions(.:format)    discussions#create 
    new_project_discussion GET /projects/:project_id/discussions/new(.:format)   discussions#new 
edit_project_discussion GET /projects/:project_id/discussions/:id/edit(.:format) discussions#edit 
     project_discussion GET /projects/:project_id/discussions/:id(.:format)   discussions#show 
         PATCH /projects/:project_id/discussions/:id(.:format)   discussions#update 
         PUT /projects/:project_id/discussions/:id(.:format)   discussions#update 
         DELETE /projects/:project_id/discussions/:id(.:format)   discussions#destroy 
       projects GET /projects(.:format)          projects#index 
         POST /projects(.:format)          projects#create 
      new_project GET /projects/new(.:format)         projects#new 
      edit_project GET /projects/:id/edit(.:format)       projects#edit 
       project GET /projects/:id(.:format)         projects#show 
         PATCH /projects/:id(.:format)         projects#update 
         PUT /projects/:id(.:format)         projects#update 
         DELETE /projects/:id(.:format)         projects#destroy 
+0

Какие параметры действительно размещены (из ваших журналов сервера)? Прямо сейчас отсутствует ключ обсуждения. – ptd

+0

Хм, когда я нажимаю на редактирование, я получаю это сообщение в терминале. 'ActionController :: ParameterMissing (параметр отсутствует или значение пуст: обсуждение): app/controllers/discussion_controller.rb: 38: in 'discussion_params' app/controllers/discussion_controller.rb: 17: in 'edit'' – roguerat

+0

можете ли вы установить драгоценный камень отладчика pry и поставить binding.pry перед paramsrequire? –

ответ

0

, когда я нажимаю редактировать я получаю это сообщение в терминале. ActionController :: ParameterMissing (пары отсутствуют или значение пустое: обсуждение): приложение/контроллеры/discussions_controller.rb: 38: в 'discussion_params' приложение/контроллерах/discussions_controller.rb: 17: в 'редактировать'

причина ошибки в вашем edit методе вашего discussions_controller.rb у вас есть эта линия

@discussions = @project.discussions.find(discussion_params) 

вам необходимо изменить его

@discussion = Discussion.find(params[:id]) 

А также измените действие для обновления ниже.

def update 
    @discussion = Discussion.find(params[:id]) 
    if @discussion.update_attributes(discussion_params) 
    redirect_to new_project_discussion_path 
    else 
    render "edit" 
    end 
end 
Смежные вопросы