当控制器收到已选中复选框的参数时,如果选中该复选框,它将返回“打开”状态。现在在我的情况下,我试图将该值存储为布尔值,这通常是您想要的复选框值。我的问题是,rails是否有办法自动将“on”(甚至存在)转换为true / false或者我是否需要执行以下操作?
value = params[my_checkbox] && params[my_checkbox] == "on" ? true : false
答案 0 :(得分:2)
答案 1 :(得分:0)
执行此操作的最佳方法是为数据库中的字段创建自定义setter,如下所示:
class Person < ActiveRecord::Base
def active=(value)
value = value == 'on' ? true : false
super(value)
end
end
这样你不必在控制器中担心它,它是知道应该是什么价值的模型。当您转到视图轨道时,会自动检查布尔字段中的复选框。如果没有工作,你也可以定义自己的吸气剂。
然后可以将其与例如商店访问者结合使用:
class Person < ActiveRecord::Base
validates :active, inclusion: {in: [true, false]}
validates :remember_password, inclusion: {in: [true, false]}
store :settings,
accessors: [:active, :remember_password],
coder: JSON
def active=(value)
value = value == 'on' ? true : false
super(value)
end
def remember_password=(value)
value = value == 'on' ? true : false
super(value)
end
end
请注意,数据库中的设置字段必须是文本,因此您可以在其中放入更多内容。