设计管理员更改不同用户的属性

时间:2016-10-07 22:06:33

标签: ruby-on-rails devise routes admin

我正在使用Devise处理用户。一个用户具有属性:admin,管理员应该能够提高非管理员用户的排名。

我在控制器中有以下方法:

def rank_up
  if current_user.admin?
    user.rank = user.rank + 1
  end
end

并在视图中显示:

- @user.each do |user|
  = user.name
  = user.rank

现在我想添加一个调用控制器中rank_up方法的链接,但该方法如何知道应该更改哪个user? 我想它必须对路线做点什么。

1 个答案:

答案 0 :(得分:1)

它确实与路线有关:)

以下几行中的内容可以:

# controller
def rank_up
  user = User.find(params[:user_id]) # find by the `user_id` you pass in link_to
  user.rank_up # call model's method
  redirect_to(:back,notice: 'User hash been ranked up')
end

# routes.rb
resources :users do
  get :rank_up, on: :member # add a route for this action
end

# view
link_to 'Rank this user up', rank_up_user_path(user_id: user.id) # user from the `each` loop