我有一个微孔模型和一个画廊模型和一个图片模型,图片要么属于微孔模型,要么属于画廊模型我有一个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,因为它只返回truefalse,如果发生错误,这是我需要重新呈现表单的行为。
此时,使用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

08-27 11:12