我需要将check_box_tag转换为f.check_box,但我遇到了麻烦。
我的复选框有
check_box_tag 'privacy', 1, (@idea.privacy=='private'), :id=>"Make Private"
所以name ='privacy',value = 1,当(@ idea.privacy =='private')为真时检查,并且id为“Make Private”。谁能帮我?谢谢!
答案 0 :(得分:1)
您可能需要添加虚拟属性来执行此操作。
例如,在app/models/idea.rb
:
class Idea < ActiveRecord::Base
attr_accessor :is_private
def is_private
privacy == 'private'
end
def is_private=(true_or_false)
self.privacy = true_or_false ? 'private' : 'public'
end
end
可以使用以下形式:
<%= form_for(@idea) do |f| %>
<%= f.check_box :is_private %>
<%= f.submit %>
<% end %>
我建议遵循Rails的约定并使用复选框的生成ID:idea_is_private
。
如果您打算以不同的方式命名,请按以下步骤操作:
<%= f.check_box :is_private, :id => 'make-private' %>
P.S。大多数人不会在ID中使用空格。
p.s.s。虚拟属性的工作原理:
f.check_box :is_private
通知Rails应该使用哪些方法来读取和写入记录。在这种情况下,复选框的值为@idea.is_private
。并且,当检查checobox时,会执行@idea.is_private = true
之类的代码。
为了实现这一点,我们必须在模型中添加is_private
和is_private=(true_or_false)
方法。