我有NewsItem
的模型has_many :attachments
。在新的NewsItem表单中,用户可以使用嵌套表单创建项目的附件。
Attachment
由title
和file
(已上传)组成。该模型对这两个字段的存在执行验证。
但是,如果我将新附件的字段留空,并点击提交按钮,我会收到正确的错误消息(“标题不能为空”等等),但附件仍然可以获得尽管如此,还是保存了两个(无效)值。
我能提出的唯一相关代码是我在@news.save
的{{1}}方法中调用create
的部分:
NewsItemController
其他所有内容都应由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
)。
关于我在这里做错了什么想法?
更新
似乎accepts_nested_attributes_for :attachments, :allow_destroy => true
- :reject_if
的参数几乎是我所需要的。不幸的是,你只能默默地“忽略”无效记录。如果两个字段中的任何一个为空,我希望用户收到错误消息。有什么想法吗?
答案 0 :(得分:0)
尝试使用:inverse_of:
class NewsItem < ActiveRecord::Base
has_many :attachments, :inverse_of => :news_item
end
class Attachment < ActiveRecord::Base
belongs_to :news_item, :inverse_of => :attachments
end
答案 1 :(得分:0)
我终于通过一个非常努力的解决方法解决了这个问题。
我现在执行使用:reject_if拒绝无效附件。但是,由于单独这不会产生所需的错误消息,我必须通过为每个条目构造一个新的附件并检查它是否有效来手动检查附件 - params散列的一部分是否有错误。然后我用相关的错误消息填充父对象的errors-array。
我知道一个相当不方便的解决方案......但至少它有效。