将check_box_tag转换为f.check_box时遇到问题 - RoR

时间:2013-06-27 01:58:54

标签: ruby-on-rails forms

我需要将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”。谁能帮我?谢谢!

1 个答案:

答案 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_privateis_private=(true_or_false)方法。