【问题标题】:Rails 4 error: ActionController::ParameterMissing in UsersController#update, param not found: userRails 4 错误:UsersController#update 中的 ActionController::ParameterMissing,未找到参数:用户
【发布时间】:2014-06-18 19:31:50
【问题描述】:

我有一个带有标准 CRUD 方法的用户控制器。其中一种方法是更新。

def update
    if @user.update(user_params)
        redirect_to @user, notice: "Account Successfully updated"
    else
        render :edit
    end
end

然后我有 rails 4 strong params 方法:

private
def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :role_ids => [])
end

我的看法是这样的:

<% if is_admin?(current_user) %>
    <%= hidden_field_tag "user[role_ids][]", nil %>
    <% Role.all.each do |role|%>
    <%= check_box_tag "user[role_ids][]", role.id, @user.role_ids.include?(role.id) %>
    <%= role.name %><br>
    <% end %>
<% end%>
</br></br>

<footer>
<nav>
<%= link_to "Update User", user_path(@user), :method => :put%>
</nav>
</footer>

当我单击视图中的更新用户链接时。我收到此错误:

 ActionController::ParameterMissing in UsersController#update
 param not found: user

错误的突出显示行是:

  private
  def user_params 
 params.require(:user).permit(:name, :email, :password, 
 :password_confirmation, :role_ids => [])
        end

我似乎无法解释为什么我得到这个错误,因为强参数条件得到满足。

有什么想法吗?


请求参数:

Started PUT "/users/4" for 127.0.0.1 at 2014-06-18 16:33:58 -0400
Processing by UsersController#update as HTML
  Parameters: {"authenticity_token"=>"1JONmLnMcf2A/2y9boXmcPG5UiwahyR0loLfw+lshco=", "id"=>"4"}
  User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 4 LIMIT 1
  User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 4 LIMIT 1
  CACHE (0.0ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 4 LIMIT 1  [["id", 4]]
Completed 400 Bad Request in 2ms

ActionController::ParameterMissing (param not found: user):
  app/controllers/users_controller.rb:49:in `user_params'
  app/controllers/users_controller.rb:32:in `update'

【问题讨论】:

  • 粘贴您的请求参数。
  • 当然。发布....请看。谢谢
  • 正如您在参数中看到的那样,您只是为用户发送“id”,您需要为 create(user_params) 发送参数,否则它将不起作用。正如我在回答中所说,使用表单助手。
  • 好的,非常感谢。我会试试的。
  • 用您发现的下一个问题更新帖子,以使我的答案适应这些问题。

标签: ruby-on-rails ruby strong-parameters


【解决方案1】:

这是因为您没有将参数嵌套在“用户”键中。

.require(:user) 正在寻找这样的哈希:

{"user"=>{params}}

表单不正确,发送前必须添加用户密钥。

<%= form_for @user, url: {action: "update"} do |f| %>
  #form items.

  <%= f.submit "Create" %>
<% end %>

编辑:

您可以将此操作的参数重新定义为:

private
def user_params
    params.permit(:name, :email, :password, :password_confirmation, :role_ids => [])
end

【讨论】:

  • 我很困惑。哪种形式?我的问题中没有表格。
  • 要么使用表单助手执行此操作以避免此问题,要么使用编辑解决方案。
  • 我也遇到了同样的问题,只需要按照您的答案发送参数即可。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多