2013-06-27 68 views
0

我需要將check_box_tag轉換爲f.check_box,但我在這樣做時遇到了麻煩。將check_box_tag轉換爲f.check_box時遇到麻煩 - RoR

我複選框有

check_box_tag 'privacy', 1, (@idea.privacy=='private'), :id=>"Make Private" 

所以當(@ idea.privacy == '私')爲真名= '隱私',值= 1,檢查,並具有ID 「爲私人」 。誰能幫我?謝謝!

回答

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 %> 

我建議下列導軌的慣例,並使用所生成的ID複選框:idea_is_private

如果你打算在不同的方式來命名,這裏是你如何能做到這一點:

<%= f.check_box :is_private, :id => 'make-private' %> 

附:大多數人不會在ID中使用空格。

ps.s.s.虛擬屬性如何工作:

f.check_box :is_private通知應該使用哪些方法讀取和寫入記錄的Rails。在這種情況下,複選框的值將是@idea.is_private。而且,當檢查checobox時,像@idea.is_private = true這樣的代碼被執行。

要做到這一點,我們必須在模型中添加is_privateis_private=(true_or_false)方法。

+0

感謝您的意見。你能向我解釋模型中發生了什麼嗎?謝謝! – BooBailey

+1

@BooBailey由於解釋有點長,我已將它更新到答案的末尾。請看一下。 :) – Domon