Rails 4 поставляется с сильными параметрами, что отличное дополнение, но я столкнулся с проблемой. У меня есть полиморфная модель Comment
, и я не могу на всю жизнь получить контроллер, чтобы принять параметры, которые ему нужны. Вот мой код (укороченный для ясности):ForbiddenAttributesError для полиморфной модели в Rails 4
Маршруты:
resources :articles do
resources :comments
end
Модели:
class Article < ActiveRecord::Base
has_many :comments, :as => :commentable
end
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
Контроллер:
class CommentsController < ApplicationController
before_action :get_commentable
def create
@comment = @commentable.comments.new(comment_params)
if @comment.save
redirect_to @commentable, :notice => "Thank you!"
else
render :new
end
end
private
def get_commentable
resource, id = request.path.split("/")[1,2]
@commentable = resource.singularize.classify.constantize.find(id)
redirect_to :home unless defined?(@commentable)
end
def comment_params
params.require(:comment).permit(:title, :message)
end
end
Опубликовано PARAMS (из формы на статьи #show):
{"authenticity_token"=>"v70nN8aFpofNw9vbVjhpsm9SwLOwKlOpNOEOTozUwCk=",
"comment"=>{"title"=>"Test","message"=>"Testing"},
"article_id"=>"1"}
кажется мне, как она должна работать, но все, что я пытаюсь я получаю ActiveModel::ForbiddenAttributesError in CommentsController#create
- даже когда я пытаюсь
def comment_params
params.permit!
end
в контроллере. У меня нет таких проблем с другими (не полиморфными) моделями, поэтому я подозреваю, что это имеет какое-то отношение к полиморфизму. Есть идеи?
На самом деле, кажется, что это ошибка, вызванная канкан, который я использую, чтобы сделать авторизацию на основе ролей - его отключение позволяет создавать комментарии. Хммм. –