【发布时间】: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