2010-11-07 56 views
26

我在使用Simple_Form與Rails 3,它很棒。我有一個簡單的問題。如果類型是幕後布爾值,我可以使用f.input創建一個複選框。但是,我希望它被預選爲真實。使用Rails 3預選複選框Simple_form

有沒有辦法通過視圖做到這一點?

回答

17

最好的辦法是設置在你的模型中的默認值,像

create_table :my_table do |t| 
    ... 
    t.boolean :my_boolean, :default => true 
    ... 
end 

simple_form會挑上,並設置複選框默認選中。

更簡單的方法就是像Dave說的那樣做,只需強制將值設爲1,但如果驗證失敗,並且您再次顯示該表單,則仍然會檢查該表單,而不管表單在表單顯示時的樣子已提交。

+3

實際上它可以工作,但它涉及更多的數據庫默認值。我認爲這裏最好的選擇是隻在客戶端通過以下方式選擇值:input_html => {:checked => true} – coorasse 2014-03-10 17:09:29

+0

這是一個更好的答案。 – allesklar 2014-08-12 09:48:50

2

這應該工作:

= f.input :some_flag, :input_html => { :value => '1' } 
+1

-1因爲真的會搞亂任何數據庫表格編輯,所以這真的不是好建議。 – 2011-07-19 16:01:50

+1

真的嗎?老兄問如何在視圖中設置它。它從哪裏說他將要編輯它? – 2011-08-25 01:00:48

+2

Hi Dave,在rails中,視圖代表瀏覽器中顯示的前端html。當Drew說「如果這個類型是幕後布爾類型」,這似乎暗示這是違背活動記錄模型的,並且對任何活動記錄模型使用複選框似乎意味着他希望編輯/更新屬性。我會避免低估你,因爲這看起來有點小氣。 – 2011-08-27 19:08:49

1

在我看來,軌辦法做到這一點是設置在控制器屬性的值:

@ some_object.some_flag = 1

+1

我想大多數人會說這個邏輯屬於模型。 – steel 2014-10-17 17:33:55

+0

我會說,這取決於。控制器中定義了強參數。因此,您的標誌的值可能取決於當前的上下文。 ? – ndemoreau 2014-10-20 07:39:43

89

如果你不想,或無法更新您的遷移做「PerfectlyNormal的答案,那麼你可以添加以下到您的f.input結束:

:input_html => { :checked => true } 

所以,它會成爲:

= f.input :some_flag, :input_html => { :checked => true } 

希望有所幫助!

+1

如果表單的值不存在於數據庫中,這是最好的解決方案... – 2013-09-20 12:25:21

+0

這應該是被接受的答案。 – allesklar 2014-08-12 09:49:16

+0

這是正確的答案。 – zx1986 2016-12-30 15:53:25

7

它的工作對我來說這只檢查一個複選框「無」

<%= f.input :notify, label: "Notification", as: :check_boxes, collection: ["None", "Daily", "Weekly", "Monthly", "Quarterly", "Yearly"], :item_wrapper_class => 'inline', :checked => ["None", true] %> 
2

我只是絆了這篇文章,什麼工作對我來說是類似於最新的應答值 - 但短。剛剛初始化對象與所希望的設置:

def new 
    Object.new(my_boolean: true) 
end