缺少参数或值为空:activity Rails 4

param is missing or the value is empty: activity Rails 4

当我尝试在我的应用程序中创建条目时,我得到

ActionController::ParameterMissing in TodosController#create
param is missing or the value is empty: activity

预期来源:

def todo_params
    params.require(:activity).permit(:name, :due)
end

这是我的要求:

    {"utf8"=>"✓",
 "authenticity_token"=>"mR11T50dN8tm/q+S0fNd+mYYZBR6Xq4it4ujtEOmt/7RmA4TjzTKD//XmFU+UumpbmKcaj9DtG6noHOD2pwk2w==",
 "todo"=>{"name"=>"Ezekiel",
 "activity"=>"test....an 8th time"},
 "commit"=>"Create Todo"}

我不确定为什么这不起作用,因为 activity 参数在请求中明确传递

这是控制器:

def create
    @todo = Todo.create(todo_params)
end

def todo_params
    params.require(:activity).permit(:name, :due)
end

最后是我的观点:

<div class="reveal" id="ezekielTask" data-reveal>
    <%= simple_form_for @todo do |f| %>
        <%= f.input :name, :as => :hidden, :input_html => {:value => "Ezekiel"} %>
        <%= f.input :activity %>
        <%= f.button :submit %>
    <% end %>
</div>

我的 rails 应用程序的这一部分是待办事项列表,它显示正常,我可以通过控制台添加条目,这种方式行不通,我不知道为什么。它正在正确传递数据,只是不接受它。

您需要更改强参数方法以要求 todo 然后接受 :name:activity 参数

def todo_params
  params.require(:todo).permit(:name, :activity)
end

原因是

{"utf8"=>"✓",
 "authenticity_token"=>"mR11T50dN8tm/q+S0fNd+mYYZBR6Xq4it4ujtEOmt/7RmA4TjzTKD//XmFU+UumpbmKcaj9DtG6noHOD2pwk2w==",
 "todo"=>{"name"=>"Ezekiel",
 "activity"=>"test....an 8th time"},
 "commit"=>"Create Todo"}

如果您在参数中看到您在 todo

中收到 nameactivity

require 参数中,我们通常使用模型的名称 (todo),在 permit 中,我们使用该模型的属性 (:name, :activity)

def todo_params
    params.require(:todo).permit(:name, :activity)
end

控制器

def create
        @todo = Todo.create(todo_params)

        respond_to do |format|
          if  @todo.save
            format.html { redirect_to location_path, notice: 'Todo was successfully created.' }

          else
            format.html { render :new }
           }
          end
        end
      end

参数

def todo_params
  params.require(:todo).permit(:name, :activity)
end