2014-09-02 55 views
1

Rails 4.1.4,Ruby 2.1.2。 Postgres的。Rails form_for複選框,爲數組類型變量賦值

我有一個具有roles屬性的用戶模型。 roles屬性是一個postgres數組類型。我正嘗試創建一個帶有不同角色選項複選框的表單,用戶可以選擇適合的角色。如果他們選擇'導演'複選框,他們的roles屬性,現在您應該看到:

@user.roles = ['director']

我想使用form_for,但也許這是不可能的。

有誰知道如何做到這一點?

form_for(@user) do |f| 
    f.check_box :roles ...? 
+0

http://edgeapi.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_check_boxes – 2014-09-02 06:53:43

+0

如何獲取所有角色的集合對象供用戶選擇? – 2014-09-02 09:04:43

回答

1
form_for(@user) do |f| 
    f.check_box :roles, User::ROLES #assuming you have a constant ROLES holding your roles. 

編輯因發表評論

+0

他想要複選框 – 2014-09-02 07:02:25

+0

我該如何處理那些不是活動記錄對象的角色?它們只是字符串(即,如果選中該複選框,我只是想將字符串'director'或'admin'添加到roles數組中)。我不認爲我知道如何設置一個響應:id方法的User :: ROLES常量。 – 2014-09-02 07:31:01

+0

:id是一個錯字,編輯 – 2014-09-02 07:52:11

1

你可以試試這個

form_for(@user) do |f| 
    f.collection_check_boxes(:roles, @user.roles, :id, :labeling_method) 

詳情

http://apidock.com/rails/v4.0.2/ActionView/Helpers/FormOptionsHelper/collection_check_boxes

+0

似乎你錯過了第三個參數,它應該是所有角色的集合對象。 – 2014-09-02 08:41:30

+0

不用我做過@ @ user.roles' ...它是表單對象......所以你告訴'collection_check_boxes(:post,:author_ids,Author.all,:id,:name_with_initial)''但是這裏' form_for'與表單對象'f'所以'f.collection_check_boxes:author_ids,Author.all,:id,:name_with_initial'參考http://edgeapi.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#methodi-i -collection_check_boxes – 2014-09-02 08:47:18

+0

好的!我錯了。但仍然建議使用其他角色收集而不是@ user.roles。將不會顯示新用戶的check_box。 – 2014-09-02 08:51:15

0

比方說,你有一些字符串CONSTA NT在你的用戶

<%= form.collection_check_boxes(:roles, USER::ROLES_STRINGS[access_if_you_need_from_this_constant_but_we_need_an_array_here].keys, :to_s, Proc.new{|l| USER::ROLE_STRINGS[access_if_you_need_from_this_constant_but_we_need_an_array_here][l]}) %> 

應該工作/讓你關閉根據你的結構!