【问题标题】:How to save the values of one model in another?如何将一个模型的值保存在另一个模型中?
【发布时间】:2012-11-28 04:34:25
【问题描述】:

我有user modelLanguage model,其中语言模型包含不同的语言,我希望用户从该模型中选择语言,并且应该为相应的用户存储它。考虑有五种语言A, B, C, D, E,那么用户必须从这些语言中进行选择。假设user 1 选择A and Cuser 2 选择B and D,则必须为该用户存储语言。我怎样才能做到这一点?请帮帮我。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 associations


    【解决方案1】:

    您需要为many-to-many 关系建模。如链接中所述,这可以通过声明来完成

    class User < ActiveRecord::Base
      has_and_belongs_to_many :languages
    end
    
    class Language < ActiveRecord::Base
      has_and_belongs_to_many :users
    end
    

    并创建一个名为language_users 的新表来存储user_idlanguage_id。此表中的每条记录都表示特定用户选择了特定语言。

    【讨论】:

    • 好的,这存储了用户拥有某某语言并且每种语言都有这些用户,但是我们可以将语言值作为数组存储在用户模型本身中吗?
    • 只有在限制任何单个用户可以选择的语言数量时才有意义。
    • 可能最多有 20 种语言。那我能做到吗?
    • 蛮力(可怕)的方法是拥有 20 个单独的列。你显然不应该那样做。下一个最佳选择是拥有一个数组类型的列,这在 SQL 中是不可能的,但 可以在 mongodb 中实现,因为数据以完全不同的方式表示,允许这样做(它不t 有列)。使用 SQL,您可以通过将一堆索引作为字符串存储在单个列中或以整数编码来解决此问题,但这会使查询效率低下,因为您必须进行一些处理才能提取索引。
    • 我认为您有两个选择:(1) 使用上述标准方式(这确实是在 SQL 中完成类似操作的方式),或 (2) 尝试 mongodb。
    【解决方案2】:

    您可以通过关联来做到这一点,在您的情况下,您可以尝试:

    class User &lt; ActiveRecord::Base

    has_and_belongs_to_many :languages

    end

    class Language &lt; ActiveRecord::Base

    has_and_belongs_to_many :users

    end

    或者您可以通过以下链接浏览。

    http://guides.rubyonrails.org/association_basics.html

    http://www.tutorialspoint.com/ruby-on-rails/rails-models.htm

    【讨论】:

    • 好的,这存储了用户拥有某某语言并且每种语言都有这些用户,但是我们可以将语言值作为数组存储在用户模型本身中吗?
    • 对不起。我的意思是语言。我正在尝试的是,我有一个 iphone 应用程序,其中有一个文本字段语言,用户应该从列表中选择多种语言并且应该存储它。
    • @ragupathi 如果您使用关联执行相同的操作会很好,否则您将必须在模型中定义与您选择的语言数量一样多的字段,并且与 cdesrosiers 提到的情况相同。
    • 为什么我们不能将值作为数组存储在单个字段本身中?为什么我们需要和语言一样多的字段?
    • 您使用的是哪个数据库?我的意思是就 SQL 而言,您不能拥有数组类型的列,而我使用的是 Neo4j 数据库,它也没有数组类型的属性。跨度>
    猜你喜欢
    • 2020-05-18
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2015-02-27
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多