为复选框指定选中和未选中的值 Rails 4

Specifiying checked and unchecked value for checkboxes Rails 4

我想创建一些复选框,它们属于特征模型。我知道 api 说 check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")。但我想获得复选框的名称。比方说,如果我有一个复选框 Air Conditioning,当它被点击时我想获得 Air Conditioning 本身。

第一个问题如何获取它,第二个问题,我应该如何构建数据库,在这种情况下它是布尔值还是字符串?

编辑 1:

例如, 那个代码;

check_box_tag 'rock', 'rock music'
# => <input id="rock" name="rock" type="checkbox" value="rock music" />

Returns 一个字符串值作为摇滚乐? 谢谢

使用布尔值很好 - 因为如果你将东西保存为字符串,如果你想要本地化和填充,它会变得混乱。

我要添加一个名为 :air_condition, :boolean, default: false 的字段。

为了方便您查看,您可以在模型中添加一个方法

def ac
  if air_condition
    'On'
  else
    'Off'
  end
end

在你看来你可以使用:

<p>You Air condition is <%= Object.ac %></p>

在您的表单中,它将是

<% form_for(Object) do |f| %>
  <%= f.check_box(:air_condition, checked: Object.air_condition) %>
  <%= f.submit %>
<% end %>

编辑 如果您只有几个属性,上述解决方案效果很好。但是如果你有一个 100,你不想每次需要一个新属性时都编辑你的对象模型。那么你应该创建一个新模型:(如果你的对象模型是船)

def Attribute << ActiveRecord::Base
  has_many: :attribute_boats
  has_many: :boats, through: attribute_boats

  def to_s
    title
  end
end

具有 title:string 等属性,也许还有其他属性。

然后创建您的加入模型:

def AttributeBoat < ActiveRecord::Base
  belongs_to :attribute
  belongs_to :boat

  validates :attribute_id, :boat_id, presence: true
end

然后在您的船模型中添加:

has_many :attribute_boats
has_many :attributes, through: :attribute_boats

然后为新的属性模型创建一个普通的 CRUD 控制器。

然后在您的 Boat-form 中添加

<% form_for(Object) do |f| %>
  <%= f.collection_check_boxes(:attribute_ids,Attribute.all, :id, :title) %>
  <%= f.submit %>
<% end %>

这意味着您可以在不更改任何代码的情况下添加新属性。