为复选框指定选中和未选中的值 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 %>
这意味着您可以在不更改任何代码的情况下添加新属性。
我想创建一些复选框,它们属于特征模型。我知道 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 %>
这意味着您可以在不更改任何代码的情况下添加新属性。