在我的Rails 4应用程序中,我曾经描述过here所描述的模型架构。
由于某些原因,我必须创建一个新的Ad
模型并转换Comment
模型,以便它与Ad
和Post
模型具有多态关联,并且我现在有以下型号:
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])
我显然做错了什么,但我无法弄清楚是什么。
有什么想法吗?
答案 0 :(得分:1)
我认为您仍然需要在Comment
模型中设置多态关系:
belongs_to :commentable, polymorphic: true