我对如何在视图和控制器中使用Devise的current_user帮助器感到困惑。我是否需要进行迁移才能在数据库表中添加user_id?我是否需要对会话控制器执行某些操作?
这是我的路线档案:
devise_for :users
resources :groups, shallow: true do
resources :ideas do
resources :comments
end
end
登录/注册等工作正常。我想允许用户只编辑他们创建的想法和评论。
我是否需要在应用程序控制器中添加辅助方法,例如:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
然后,理论上,我应该能够做到以下几点?
<% if current_user %>
<%= link_to 'Edit', edit_idea_path(@idea) %>
<% end %>
然后我还需要用current_user更新我的控制器编辑操作?例如。 ?
@comment = current_user.comment.find(params[:id])
答案 0 :(得分:2)
我认为你要做的是:
<% if current_user.id == @idea.user.id %>
<%= link_to 'Edit', edit_idea_path(@idea) %>
<% end %>
答案 1 :(得分:2)
<% if current_user.id == @idea.user.id %>
<%= link_to 'Edit', edit_idea_path(@idea) %>
<% end %>
将有点工作,但它与解锁门一样安全。它没有明确阻止用户转到/idea/5/edit
并进行更改(即使他们没有创建/拥有想法5)。如上所述:使用CanCan或在控制器上使用:update方法滚动自己的解决方案。