2014-09-10 1 views
0

В моем приложении Пользователи создают сообщения и другие пользователи с ролью «исполнитель» создают комментарии Я использую cancan, что мне нужно делать, если создавать комментарии могут Пользователи с ролью «исполнитель» и пользователь, создающие сообщение, но не могут создавать комментарии к другие сообщения?Как добавить способность cancan, если мне нужно, чтобы пользователь мог создавать комментарии только для своих сообщений?

if user.has_role? :executor 
    can :manage, [Responce, Comment] 
    else 
    can :read, :all 
    end 

if user.has_role? :customer 
    can :manage, Post 
    can :manage, Comment, :user => {user_id: user.id} 
     else 
    can :read, :all 
    end 

Comment.rb

class Comment < ActiveRecord::Base 
    acts_as_nested_set :scope => :attachable 

    belongs_to :attachable, :polymorphic => true 
    has_many :comments, :as => :commentable 
    belongs_to :user 
end 

class User < ActiveRecord::Base 

    before_create :create_role 


    has_many :posts 
    has_many :comments, as: :attachable 
    has_many :users_roles, dependent: :destroy 
    has_many :roles, through: :users_roles 


    def has_role?(role_sym) 
    roles.any? { |r| r.name.underscore.to_sym == role_sym } 
    end 


    private 
    def create_role 
     self.roles << Role.find_by_name(:customer) 
    end 
end 
+0

что вы хотите достичь? Не могли бы вы перефразировать, я не могу это получить. –

+0

Да как обычно у начинающих) на ломаном английскей языку хочу то не знаю что)))) нужно было чтобы юзер мог комментировать только свои посты, но никак не другие, в коментах полиморфизм, не знал как его использовать в таких случаях))) ребята с тостера помогли) Спасибо – user3089327

ответ

1

ability.rb

can :add, Comment, attachable: {user_id: user.id} 
can [:update, :delete], Comment, user_id: user.id 

в контроллере CommentsCotroller

@comment = Comment.new(com_params) 
authorize! :add, @comment = @comment 
Смежные вопросы