Ruby on rails Ruby on Rails:保存无效的嵌套记录

Ruby on rails Ruby on Rails:保存无效的嵌套记录,ruby-on-rails,ruby-on-rails-3,nested-attributes,Ruby On Rails,Ruby On Rails 3,Nested Attributes,我有一个模型新闻项目,有很多附件。在新的NewsItem表单中,用户可以使用嵌套表单创建项目的附件 附件由标题和上载的文件组成。模型对这两个字段的存在进行验证 但是,如果我将新附件的字段保留为空,并点击“提交”按钮,我确实会收到正确的错误消息“标题不能为空”,等等,但是附件仍然会保存为两个无效值 我能想到的唯一相关代码是在NewsItemController的create方法中调用@news.save的部分: 其他一切都应该由rails News accepts_nested_attribute

我有一个模型新闻项目,有很多附件。在新的NewsItem表单中,用户可以使用嵌套表单创建项目的附件

附件由标题和上载的文件组成。模型对这两个字段的存在进行验证

但是,如果我将新附件的字段保留为空,并点击“提交”按钮,我确实会收到正确的错误消息“标题不能为空”,等等,但是附件仍然会保存为两个无效值

我能想到的唯一相关代码是在NewsItemController的create方法中调用@news.save的部分:

其他一切都应该由rails News accepts_nested_attributes_for:attachments、:allow_destroy=>true来处理

你知道我做错了什么吗

更新:

我需要的似乎是accepts\u nested\u attributes\u的:reject\u if-parameter。不幸的是,您只能默默地忽略无效记录。如果两个字段中的任何一个为空,我希望用户收到一条错误消息。有什么想法吗?

尝试使用:


我终于解决了这个问题,做了一个相当艰苦的变通

我现在确实使用:reject_来拒绝无效的附件。但是,由于这本身并不能生成所需的错误消息,因此我必须手动检查params散列的附件部分的错误,方法是为每个条目构造一个新附件,并检查它是否有效。然后用相关的错误消息填充父对象的errors数组


我知道这是一个相当不方便的解决办法。。。但至少它是有效的。

问题是,我简化了一些问题:这整个事情是一个多态关系,并通过一个可附加的接口:附件属于:可附加的,:多态=>真的,新闻项有很多:附件,:as=>:可附加的,:dependent=>:destroy刚刚发现rails文档说,那就是:反向不适用于多态关联,还有其他想法吗?对不起,我没有。顺便说一句,你应该用你正在使用多态的信息更新你的问题。
respond_to do |format|
  if @news.save
    flash[:success] = t( 'news.flash.created' )
    format.html { redirect_to news_index_path }
  else
    format.html { render :action => "new" }
  end
end
class NewsItem < ActiveRecord::Base
  has_many :attachments, :inverse_of => :news_item
end

class Attachment < ActiveRecord::Base
  belongs_to :news_item, :inverse_of => :attachments
end