У меня есть следующие модели:
class Post < ActiveRecord::Base
has_many :responses, as: :responseable, dependent: :destroy
end
class Call < ActiveRecord::Base
has_many :responses, as: :responseable, dependent: :destroy
end
class Meeting < ActiveRecord::Base
has_many :responses, as: :responseable, dependent: :destroy
end
class Response < ActiveRecord::Base
belongs_to :responseable, polymorphic: true # Tested
end
В CanCan я пытаюсь определить возможности для конкретного пользовательского действия «Ответы» через атрибуты в полиморфной ассоциации. Действие выглядит следующим образом:
class ResponsesController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource
respond_to :html, :xml, :js, :json, :pdf
# GET /responses/polling
# GET /responses/polling.json
def polling
responseable_type = params[:responseable_type]
klass = [Post, Call, Meeting].detect { |c| responseable_type}
@responseable = klass.find(params[:responseable_id])
@responses = @responseable.responses.where("created_at > ?", Time.at(params[:after]))
end
...
И мой файл способностей выглядит так:
...
can :polling, Response, :responseable_type = "Post", :responseable => { :user_expert_private => false, :countries => { :id => user.country_ids} }
...
Это действие выполняется с помощью функции javascript, которая опроса для новых ответов каждые 5 секунд. Однако, когда это выполняется, я получаю следующие ошибки в журнале:
A NameError occurred in responses#polling:
uninitialized constant Responseable
activesupport (3.2.8) lib/active_support/inflector/methods.rb:230:in `block in constantize'
Любая идея - правильный способ определения способностей по атрибутам из полиморфных отношений?
В принципе, я не хочу, чтобы пользователи могли просматривать/создавать ответ, если они не могут ? show:
родительский объект.