Rails 4:创建操作在浅资源的多态关联中不起作用

Rails 4: create action not working in polymorphic association with shallow resources

在我的 Rails 4 应用程序中,我曾经描述过模型架构

出于某些原因,我必须创建一个新的 Ad 模型并转换 Comment 模型,使其与 AdPost 模型具有多态关联,我现在有以下型号:

User
has_many :administrations
has_many :calendars, through: :administrations
has_many :comments

Calendar
has_many :administrations
has_many :users, through: :administrations
has_many :posts
has_many :comments, through: :posts
has_many :ads
has_many :ads, through: :posts

Administration
belongs_to :user
belongs_to :calendar

Post
belongs_to :calendar
has_many :comments, as: :commentable

Ad
belongs_to :calendar
has_many :comments, as: :commentable

Comment
belongs_to :commentable, polymorphic: true
belongs_to :user

这是我的路线:

resources :calendars do
  resources :posts, shallow: true do
    resources :comments, shallow: true
  end
  resources :ads, shallow: true do
    resources :comments, shallow: true
  end
end

在我实现多态关联之前,一切都运行良好。

现在,我无法再为 Post 条记录或 Ad 条记录创建评论。

这是我的 Comments#Create 操作:

def create
  @post = Post.find(params[:commentable_id])
  @ad = Ad.find(params[:commentable_id])
  @comment = @commentable.comments.build(comment_params)
  @comment.user_id = current_user.id
  respond_to do |format|
    if @comment.save
      format.html { redirect_to :back }
      format.json { render :show, status: :created, location: @comment }
      format.js
    else
      format.html { render :new }
      format.json { render json: @comment.errors, status: :unprocessable_entity }
    end
  end
end

当我尝试创建新评论时,出现以下错误:

Couldn't find Post with 'id'=
@post = Post.find(params[:commentable_id])

我显然做错了什么,但我不知道是什么。

有什么想法吗?

我认为您仍然需要在 Comment 模型中设置多态关系:

belongs_to :commentable, polymorphic: true