【问题标题】:Modeling custom relationships in Rails在 Rails 中建模自定义关系
【发布时间】:2014-09-22 01:34:40
【问题描述】:

我想知道产生这种关系的最佳方式是:

我有两个模型:Answer 和 Article。

答案定义如下:

**Answer**
 - content:text
 - link:string

我想创建如下文章

**Article**
 - title:string
 - what:Answer
 - when:Answer
 - how:Answer
 - why:Answer

创建文章模型的最佳方法是什么?

我知道一篇文章 has_many 答案和一个答案 belongs_to 一篇文章,但我不知道如何实现这种关系或如何将文章的答案数量限制为四个(什么、何时如何、为什么) .

【问题讨论】:

    标签: ruby-on-rails activerecord model relationship


    【解决方案1】:

    一种选择是创建一个答案模型:

    **Answer**
      - content:text
      - link:string
      - question_type:string
    

    question_type 将是“什么”、“何时”、“谁”或“为什么”。还有一个文章模型:

    **Article**
      - title:string
    

    然后您可以像这样设置您的关系:

    answer.rb

    class Answer < ActiveRecord::Base
      has_one :article
    end
    

    article.rb

    class Article < ActiveRecord::Base
      has_many :answers
    end
    

    最后,您可以编写一个自定义验证器,以确保文章仅被分配 1x 每种问题类型。验证器看起来像:

    article.rb

    validate :question_type_validator
    
    def question_type_validator
      question_types = answers.all.map(&:question_type)
      question_types.each do |question_type|
        if question_types.count(question_type) > 1
          errors.add(:question_type, "Must only have one of each, what, when, who, why.")
        end
      end
    end
    

    【讨论】:

    • 好的,我真的很喜欢这种方法。我在建模这种关系时遇到了问题,因为我一直在考虑一对一的关系,但我认为一对多是更好的方法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多