Rails CanCan只显示用户创建的数据

时间:2013-07-04 06:40:49

标签: ruby-on-rails ruby-on-rails-3 devise cancan

我正在使用Devise注册帐户和登录/注销。我想要添加的下一个功能是仅显示为给定用户输入的数据。例如,如果我创建一个新的“某事”(在我的情况下是客户端,在/ clients / new),我只希望创建该东西的人能够查看它。现在,如果我登录并创建一个新客户端,然后以其他用户身份注销并重新登录,我就能看到我创建的客户端作为其他用户。这应该受到限制,以便作者是唯一可以阅读,更新和销毁自己客户的人。

我现在已经在CanCan上观看了Ryan Bate的screencast 3次,但它似乎只涉及为不同的角色设置它,而不是基于作者限制内容。

我如何使用CanCan解决这个问题?

我当前的ability.rb中没有任何内容,只有空initialize(user)方法。

我在这个方法中试过这个:

can :update, Client do |client|
    client.try(:user) == user
end

<% if can? :update, @client %> ... <% end %>

围绕在​​索引视图中显示客户端的循环,但无济于事。

2 个答案:

答案 0 :(得分:1)

我认为使用CanCan过滤结果不是最佳解决方案。 如果用户'has_many'客户端,那么在您的控制器方法中只查询用户的客户端:

@clients = current_user.clients

答案 1 :(得分:0)

试一试

def initialize(user)
  can :update, Client, :user_id => user.id
end

来自cancan wiki