我有一个名为Test的模型accepts_nested_attributes_forsubtest。一个测试基本上有一个id,并且有多个子测试与单个测试相关联。
我想验证SubTest的属性是否为数字。这是我目前的模型。
class Test < ActiveRecord::Base
has_many :sub_tests
accepts_nested_attributes_for :sub_tests
end
class SubTest < ActiveRecord::Base
belongs_to :test
validates :measurement, :numericality => true, :allow_nil => true
end
这是测试控制器
def create
respond_to do |format|
if @test.save
flash.now[:notice] = "Test Created"
format.html { redirect_to(@test) }
format.xml { render :xml => @test, :status => :created, :location => @test }
format.js
else
flash.now[:error] = "[Error] Test Not Created Because: #{@test.errors.full_messages.join(", ")}"
format.html { render :action => "new" }
format.xml { render :xml => @test.errors, :status => :unprocessable_entity }
format.js
end
end
结束我希望控制器中的create操作在用户在sub_test表单中输入非数字字符串时抛出错误。
目前,如果我为sub_test输入非数值。度量时,Rails不会创建Test或SubTest对象(期望的行为)。但是由于某种原因没有抛出错误,并且Test控制器触发了create.js.erb部分。
我得到的印象是验证sub_test的数值。测量实际上应该发生在测试模型中,但是我不确定如何编写一个自定义的验证方法来测试数值。
提前感谢!
明白了。我需要指定一个_error.js。erb partial in my Test controller.
def create
respond_to do |format|
if @test.save
flash.now[:notice] = "Test Created"
format.html { redirect_to(@test) }
format.xml { render :xml => @test, :status => :created, :location => @test }
format.js
else
flash.now[:error] = "[Error] Test Not Created Because: #{@test.errors.full_messages.join(", ")}"
format.html { render :action => "new" }
format.xml { render :xml => @test.errors, :status => :unprocessable_entity }
format.js { render :partial => 'error' }
end
end
在错误部分,我只是附加了我的#messagesdiv(因为我正在做表单提交通过ajax)