我有一个任务对象,其模型类似
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”。
非常感谢!
答案 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
...