2016-01-08 53 views
0

在Rails 4,我有以下結構:Rails的多選靜態哈希 - 如何將值保存到數據庫

用戶模型

has_many :user_languages 

USER_LANGUAGE模式

belongs_to :user 

在我的用戶視圖中,我有以下內容:

<%= form_for @user do |f| %> 
<%=f.select("user_languages", languages, {selected: "EN"}, {:multiple => true})%> 
<% end %> 

我希望用戶選擇他/她流利說話的語言並將它們保存在數據庫中的user_language表中。對於每種語言,我們都會在該表中添加一行。

知道語言是靜態散列/數組,而不是數據庫中的表,我如何將這些值保存到數據庫?這種方法根本不起作用,即使在控制器中將它們列入白名單中,也沒有任何內容保存在數據庫中。

回答

0

您可以在列中使用軌道serialize

serialize :languages, Hash 

BTW,從那裏您對使用者顯示爲下拉菜單的語言嗎?我的意思是你從哪裏獲取下拉內容?您是否將languages存儲在應用程序某處的任何全局變量中?

我得到了一個更好的解決方案。你爲languages創建一個新表。 正如你提到的用戶可以有許多語言,所以新的關聯可以是:

class User 
    has_and_belongs_to_many :languages 
end 
class Language 
    has_and_belongs_to_many :users 
end 

它會解決你的問題,也顯得非常整齊。

+0

我從我的應用程序某處的全局變量中獲取下拉內容(語言)。如果可能的話,我想避開一張桌子。另外,我不喜歡序列化,因爲我無法輕鬆搜索說某些語言的用戶。 – Mike

+0

@Mike,你正在使用一個名爲'user_languages'的表。當你使用表格時,你爲什麼不想用我的方法?它還需要一個表和一個連接表。 順便說一句,如果你不想序列化,那麼只有其他的選擇,因爲你想使用數據進行搜索。 – Emu

相關問題