我想创建一些复选框,它们将属于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" />
返回一个字符串值作为摇滚音乐? 谢谢
答案 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 %>
这意味着您可以在不更改任何代码的情况下添加新属性。