2013-06-23 62 views
0

我有两个表bookmarkscategories。这些模型具有HABTM关系。我如何只允许创建类别的用户在rails中编辑它

一切正常,但我只想让users谁创建了category能够编辑它们。我在bookmarks上设置了这个设置,但是有没有办法使用bookmarkscategories之间的关系来做到这一点,或者我只是将其设置为与bookmarks相同?在categories表中有user_id

+0

您的要求是 - 您只需要创建书签的用户编辑它们? –

+0

是的,有没有办法做到这一点使用书签和类别之间的关系,或者我只是在类别表中创建一个用户ID列 –

+0

请查看我的答案下面的两种情况。 –

回答

1

假设你已经加入2个表:

user.rb

has_many :categories, :through => :user_categories 

category.rb

has_many :users, :through => :user_categories 
has_many :bookmarks, :through => :bookmark_categories 

def is_editable_by?(user) 
    user.category.include? self 
end 

bookmark.rb

has_many :categories, :through => :bookmark_categories 
has_many :users, :through => :categories 

your_view.html.erb

if category.is_editable_by? current_user 
    <%= link_to "edit", edit_category_path, category %> 
end 
+0

您还需要防止在控制器中进行编辑。 – doesterr

1

如果目的是

a)仅谁创建用户的书签可以编辑这些

然后我们需要在bookmark模型有一个单独的列user_id存储书签的创造者并允许访问类似category

b)创建该类别的用户可以编辑该类别下的任何书签,然后我们可以使用关联获得具有权限的用户。

bookmark.rb

Class BookMark < ActiveRecord::Base 
    has_many :categories, :through => :bookmark_categories 
    has_many :users, :through => :categories 
end 

,我们就可以说bookmark.users.include?(current_user)然后允许编辑仅当此条件满足。

相关问题