Rails 4:创建操作在浅资源的多态关联中不起作用
Rails 4: create action not working in polymorphic association with shallow resources
在我的 Rails 4 应用程序中,我曾经描述过模型架构 。
出于某些原因,我必须创建一个新的 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])
我显然做错了什么,但我不知道是什么。
有什么想法吗?
我认为您仍然需要在 Comment
模型中设置多态关系:
belongs_to :commentable, polymorphic: true
在我的 Rails 4 应用程序中,我曾经描述过模型架构
出于某些原因,我必须创建一个新的 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])
我显然做错了什么,但我不知道是什么。
有什么想法吗?
我认为您仍然需要在 Comment
模型中设置多态关系:
belongs_to :commentable, polymorphic: true