【问题标题】:Rails multiselect with static hash - how to save values to database带有静态哈希的 Rails 多选 - 如何将值保存到数据库
【发布时间】:2016-04-12 15:49:20
【问题描述】:

在 Rails 4 中,我有以下结构:

用户模型

has_many :user_languages

用户语言模型

belongs_to :user

在我的用户视图中,我有以下内容:

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

我希望用户选择他/她能说流利的语言并将它们保存在数据库中的 user_language 表中。对于每种语言,我们都会在此表中添加一行。

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

【问题讨论】:

    标签: ruby-on-rails database forms


    【解决方案1】:

    可以在栏目上使用railsserialize

    serialize :languages, Hash 
    

    顺便说一句,您从哪里向用户显示语言作为下拉菜单?我的意思是从哪里获取下拉内容?您是否将languages 存储在应用程序某处的任何全局变量中?

    我有一个更好的解决方案。您为languages 创建一个新表。 正如您所提到的,用户可以有多种语言,所以新的关联可以是:

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

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

    【讨论】:

    • 我正在从我的应用程序某处的全局变量中获取下拉内容(语言)。如果可能的话,我想避免使用一张桌子。另外,我不喜欢序列化,因为我无法轻松搜索说某些语言的用户。
    • @Mike,您正在使用一个名为 user_languages 的表。当您使用表格时,为什么不想使用我的方法?它还需要一个表和一个连接表。顺便说一句,如果您不想序列化,那么只剩下另一个选项,因为您想使用数据进行搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2011-10-05
    • 1970-01-01
    • 2012-04-20
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多