在Rails 4中,我有以下结构:
用户模型
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 :(得分:0)
您可以在列上使用rails 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
它会解决你的问题而且非常整洁。