我正在使用Rails 4.0.1和Devise 3.3.2。
我正在尝试创建一个管理员可以更新多个用户角色的页面。类似的东西:
manage.html.erb:
<% @user.each do |user| %>
<%= form_for user, :html => { :multipart => true} do |f| %>
<%= user.profile_name %>
<%= user.right %>
<%= f.label :right %><br />
<%= f.radio_button :right, "None" %>User
<%= f.radio_button :right, "Administrator" %>Administrator</div>
<%= f.submit %>
<% end %>
<% end %>
user_controller.rb:
def manage
@user = User.all
respond_to do |format|
@user.update(user_params)
end
end
private
def user_params
params.require(:user).permit(:id, :right)
end
但我收到了一个错误。据我了解,它无法理解用户的身份。任何想法或教程?
Started GET "/manage" for 127.0.0.1 at 2013-12-24 22:22:23 +0600
Processing by UserController#update as HTML
Completed 400 Bad Request in 15ms
ActionController::ParameterMissing (param not found: user):
app/controllers/user_controller.rb:46:in `user_params'
app/controllers/user_controller.rb:39:in `block in update'
app/controllers/user_controller.rb:38:in `update'
答案 0 :(得分:2)
这里有很多问题......但我认为你的第一个挑战是:
您似乎正在尝试同时执行表单的显示,并在同一操作中处理表单的提交。那不行。
rails约定有一对动作:new + create和edit + update。 new
和edit
只关注显示表单,create
和update
处理提交形式。
因此,您需要做的第一件事就是在控制器中执行两个操作。一个人将分配@user
然后呈现您拥有的视图,另一个将使用您在提交表单时获得的参数,并使用这些参数执行某些操作来更新用户,就像您当前尝试做的那样在控制器的render
块中。
接下来要遇到的其他问题是:
form_for
不会发布到您的自定义路线update
方法并传入所有参数更复杂答案 1 :(得分:1)
当您提交此表单时,它将使用您控制器中的create
或update
方法,而不是manage
,除非您专门添加了PATCH
路由为了它。
因此,您需要确保在这些方法中使用user_params
。
此外,除非你的问题是拼写错误,否则<% end %>
manage.html.erb