Rails使用静态哈希进行多选 - 如何将值保存到数据库

时间:2016-01-08 03:20:11

标签: ruby-on-rails database forms

在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表中的数据库中。对于每种语言,我们都会在此表中添加一行。

知道语言是静态哈希/数组,而不是数据库中的表,如何将这些值保存到数据库中?这种方法根本不起作用,即使在控制器中将它们列入白名单,也不会在数据库中保存任何内容。

1 个答案:

答案 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

它会解决你的问题而且非常整洁。