Ruby on rails 轨道形状问题

Ruby on rails 轨道形状问题,ruby-on-rails,ruby-on-rails-3,formtastic,Ruby On Rails,Ruby On Rails 3,Formtastic,使用formtastic创建一个布尔字段,则该值不会因错误而持久。如果已提交且存在错误,则在重新加载时,布尔字段会自动检查自身,这是错误的。我可以看出问题出在冲突的值中,hidden是0,而输入是1。两者都应为0。如何更正此问题,使两者最初都设置为0。我哪里做错了 表格编号: <%= f.input :legal, :as => :boolean %> js只是将所有错误重新呈现在表单中,隐藏字段始终设置为0以模拟未选中的框,这是正确的行为: 相反,我建议您的ISSUE是模

使用formtastic创建一个布尔字段,则该值不会因错误而持久。如果已提交且存在错误,则在重新加载时,布尔字段会自动检查自身,这是错误的。我可以看出问题出在冲突的值中,hidden是0,而输入是1。两者都应为0。如何更正此问题,使两者最初都设置为0。我哪里做错了

表格编号:

<%= f.input :legal, :as => :boolean %>

js只是将所有错误重新呈现在表单中,隐藏字段始终设置为0以模拟未选中的框,这是正确的行为:

相反,我建议您的ISSUE是模型中的访问器方法

如果@user.legal为true类型,则选中复选框输入,或者更准确地说,如果

ActionView::Helpers::InstanceTag.check_box_checked?(@user.legal,"1")
计算结果为true

现在,若legal是一个布尔数据库列,rails初始值设定项会将其转换为ruby boolean,若您这样做了

@user = User.new(:legal => "0")
然后

但如果legal不是db列,否则:as=>:boolean是不必要的,那么您必须以某种方式定义了一个访问器方法

如果您使用一个简单的attr_访问器进行访问

@user.legal == "0"
正确计算为未选中的框

但如果您或您的框架想要比rails更聪明,并且您定义:

attr_writer :legal
def legal
 !!@legal
end
或者类似的东西在引擎盖下给你一个正确的布尔值,那么你就有麻烦了:

这里显示初始表单!!nil为false=>未选中框。 但是在提交/重新加载时!!0为真=>复选框


让我知道我的直觉是否正确:

隐藏字段始终设置为0以模拟未选中的框,这是正确的行为:

相反,我建议您的ISSUE是模型中的访问器方法

如果@user.legal为true类型,则选中复选框输入,或者更准确地说,如果

ActionView::Helpers::InstanceTag.check_box_checked?(@user.legal,"1")
计算结果为true

现在,若legal是一个布尔数据库列,rails初始值设定项会将其转换为ruby boolean,若您这样做了

@user = User.new(:legal => "0")
然后

但如果legal不是db列,否则:as=>:boolean是不必要的,那么您必须以某种方式定义了一个访问器方法

如果您使用一个简单的attr_访问器进行访问

@user.legal == "0"
正确计算为未选中的框

但如果您或您的框架想要比rails更聪明,并且您定义:

attr_writer :legal
def legal
 !!@legal
end
或者类似的东西在引擎盖下给你一个正确的布尔值,那么你就有麻烦了:

这里显示初始表单!!nil为false=>未选中框。 但是在提交/重新加载时!!0为真=>复选框


让我知道我的直觉是否正确:

请发布相关的控制器操作创建/更新代码如果您的model user.rb中有一个属性可访问部分,请确保您已将:legal添加到列表中。@john Gibb,是的。问题是初始值冲突请上传相关控制器操作创建/更新代码如果您的model user.rb中有可访问的属性部分,请确保您已将:legal添加到列表中。@john Gibb,是的。问题是初始值冲突,尽管它有效,但没有:legal不是一个数据库列,如果可以访问它,这也是问题的一部分。找不到如何将其定义为访问器方法John您使用的是什么ORM?ActiveRecord?您是如何定义合法访问器方法的?您是否对其任务进行了任何转换?谢谢您的帮助,但我决定遵循您的简单建议,只添加一个名为legal的数据库列。虽然它有效,但没有:legal不是一个数据库列,如果可以访问它,这也是问题的一部分。找不到如何将其定义为访问器方法John您使用的是什么ORM?ActiveRecord?您是如何定义合法访问器方法的?您是否对其任务进行了任何转换?谢谢您的帮助,但我决定按照您的简单建议,只添加一个名为legal的数据库列。