Rails 4:创建不与浅层资源进行多态关联的动作

时间:2015-12-10 22:23:15

标签: ruby-on-rails ruby-on-rails-4 activerecord polymorphic-associations

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

由于某些原因,我必须创建一个新的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])

我显然做错了什么,但我无法弄清楚是什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

belongs_to :commentable, polymorphic: true