我有一个微孔模型和一个画廊模型和一个图片模型,图片要么属于微孔模型,要么属于画廊模型我有一个micropost表单,它accepts_nested_attributes_for :pictures
并在模型中设置关联,控制器micropost创建动作和强参数如下所示,
微控制器
def create
@micropost = current_user.microposts.create(micropost_params)
@pictures = @micropost.pictures
@pictures.each do |pic|
pic.update!(gallery_id: params[:gallery_id])
end
...
render 'static_pages/home'
end
def micropost_params
params.require(:micropost).permit(:content, pictures_attributes: [:id, :gal_refs_id, :picture, :_destroy]))
end
画廊是预设的,所以我有它的id,这是发送在一个隐藏的领域,并检索在微孔控制器,如图所示。
问题是我需要返回
@micropost
对象以便可以更新:gallery_id
,因此我不能使用@micropost.save
,因为它只返回true
或false
,如果发生错误,这是我需要重新呈现表单的行为。此时,使用create-it会自动失败并呈现模板。
我怎样才能克服这一点,或者有更好的方法来做到这一点?
提前谢谢!
最佳答案
尝试使用下面的代码如果@microst没有错误,它将创建@microst,您可以更新其关联的对象
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
# if the object has no errors
@pictures = @micropost.pictures
@pictures.each do |pic|
pic.update!(gallery_id: params[:gallery_id])
end
...
render 'static_pages/home'
else
# show Errors
@micropost.errors
end
end
def micropost_params
params.require(:micropost).permit(:content, pictures_attributes: [:id, :gal_refs_id, :picture, :_destroy]))
end