У меня есть следующие модели:
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 я пытаюсь определить возможности для определенного пользовательского действия Responses через атрибуты в полиморфной ассоциации. Действие выглядит так:
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])
undivided_millisecond_epoch_time_in_integer = params[:after]
undivided_millisecond_epoch_time_in_decimal = (undivided_millisecond_epoch_time_in_integer).to_d
divided_millisecond_epoch_time_in_decimal = (undivided_millisecond_epoch_time_in_decimal / 1000000).to_d
@responses = @responseable.responses.where("created_at > ?", Time.at(divided_millisecond_epoch_time_in_decimal))
end
...
Это действие запускается с помощью функции 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'
Есть идеи, как правильно определить эти типы способностей?