我想调用一个在保存时更新属性的方法。
这是我的index.html.erb
<% @users.each do |user| %>
<div>
<strong><%= user.email %></strong>
</div>
<% if can? :update, User %>
<%= link_to 'Make Author', User, method: :add_roles %>
<% end %>
以下是我的user_controller.rb
def add_roles
respond_to do |format|
if @user.update(user_params)
user.author = true
user.save!
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
端
但它不会更新属性。我认为这是因为我没有正确地将它附加到正确的用户。我想current_user更新另一个用户。
答案 0 :(得分:0)
我认为解决方案很简单,首先要做avlazarov在评论中所说的:
在视图中&lt;%= link_to&#39;制作作者&#39;,&#34; / users /#{user.id} / add_roles&#34;, 方法:: patch%&gt;在routes.rb补丁&#39; / users /:id / add_roles&#39; =&GT; &#39;用户#add_roles&#39;
或者更简单的东西,在routes.rb中:
resources :users do
patch :add_roles, on: :member
end
然后在视图中:
<%= link_to 'Make author', add_roles_users_path(user) %>
然后将app / controllers中的user_controller.rb重命名为users_controller.rb,并确保类名为UsersController。