这是为了在Rails f.check_box
块中使用form_for
方法。
复选框表示模型上的bool属性。但是,我希望检查等于false并且取消选中等于true。 Checked(false)也是默认值。
因此,如果用户选中并提交表单,则model属性将为false。
答案 0 :(得分:4)
见the docs。
你应该没问题f.check_box :something, {}, 0, 1
0
和1
分别是已选中和未选中的值。
更新:我认为在给出其选中/取消选中的值时,系统会正确选中/取消选中该复选框,但如果不是这样,则可以执行以下操作:
f.check_box :something, { :checked => !@model.something }, 0, 1
即。明确告诉复选框在属性为false时检查,并在其为真时取消选中。
但是,总是翻转这些值会让人感到有些困惑。也许处理它的“柔道”方式是重命名属性,因此可以使用Rails的默认行为false = unchecked。
第二次更新:复选框的语义非常清楚:Checked表示true(因此Rails的默认行为)。因此,如果您使用“向后”复选框,我想您的域模型存在问题。如果用户选中该框,则该用户正在回答肯定的内容(例如“是,我想要您的简报”或“是,我想保持登录状态”)。
如果你的模型必须翻转它,那么你的模型的属性是与用户意图相比的倒退,也许是双重否定(例如“是的,我希望你的简报”变成no_newsletter = false
)。我想用简单的术语对它进行建模必须更简单。