验证关联对象会导致2个验证错误消息

时间:2009-07-27 12:21:08

标签: ruby-on-rails validation

我有一个任务对象,其模型类似

  has_many :notes, :validate => true

注释使用这样的模型:

  belongs_to :task
  validates_presence_of :body, :message => "cannot be empty, bonehead!"

我有/ tasks / new视图来创建一个新任务(表单_for),以及一个注释(字段_for)。我希望Task和Note的验证失败消息在表单的顶部吐出。

控制器看起来像:

def create
    @task = Task.new(params[:task])
    @note = Note.new(params[:note])
    @task.notes << @note
    if @task.save
       redirect_to tasks_path
    else
        render :action => 'new'
    end

问题是,当没有输入Note body时,在@note中返回验证错误消息,“Body不能为空,bonehead”;和@task中的另一个,“注意无效”。

我在这个视图中吐出两个:

 <%= error_messages_for 'task', 'note', 'users_list', :header_message => nil, :message => nil %>

我想保留Note模型验证消息,而不是将其作为Task对象的一部分,“Not is invalid”。

非常感谢!

1 个答案:

答案 0 :(得分:2)

我面前没有控制台,但我认为如果你将if语句更改为if @note.valid? and @task.save,它会先检查注释,只给你第一条消息。

修改:这只是一个FYI,但您可能希望使用build而不是两个new语句:

def create
  @task = Task.new(params[:task])
  @note = @task.notes.build(params[:note])
  if @task.save
    ...