Rails有办法将复选框从“on”转换为true吗?

时间:2011-07-01 14:17:20

标签: ruby-on-rails ruby forms activerecord

当控制器收到已选中复选框的参数时,如果选中该复选框,它将返回“打开”状态。现在在我的情况下,我试图将该值存储为布尔值,这通常是您想要的复选框值。我的问题是,rails是否有办法自动将“on”(甚至存在)转换为true / false或者我是否需要执行以下操作?

value = params[my_checkbox] && params[my_checkbox] == "on" ? true : false

2 个答案:

答案 0 :(得分:2)

你可以使用:

value = !params[:my_checkbox].nil?

因为复选框不会返回任何值,如果没有选中(由forum暗示)

答案 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

请注意,数据库中的设置字段必须是文本,因此您可以在其中放入更多内容。