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

时间:2015-04-27 06:13:26

标签: ruby-on-rails checkbox

我想创建一些复选框,它们将属于Feature Model。我知道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" />

返回一个字符串值作为摇滚音乐? 谢谢

1 个答案:

答案 0 :(得分:2)

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

我会添加一个名为: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控制器。

然后在你的船形中添加

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

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