【问题标题】:Models with multiple belong_to and naming具有多个 belongs_to 和命名的模型
【发布时间】:2011-09-03 09:35:48
【问题描述】:

我正在使用 Ruby on Rails 创建自己的小任务系统,但我需要一些关于如何调用我的属性的指导,以及我是否正在考虑正确的解决方案。

所以我有一个任务模型。

一个任务可以与用户有两种关系:创建者和负责该任务的用户。

我当然可以只调用我的属性:creator:integer 和一个 responsible:integer,但是 Ruby on Rails 的首选方式是什么?

他们应该只是被称为上面,或 creator_user_id:integer 还是我应该用一个 user_id 和一个 task_id 和那么角色呢?

【问题讨论】:

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


    【解决方案1】:

    在您的迁移中,您需要以下内容:

    class CreateTasks < ActiveRecord::Migration
      def change
        create_table :tasks do |t|
          t.references :creator
          t.references :responsible
    
          t.timestamps
        end
        add_index :tasks, :creator_id
        add_index :tasks, :responsible_id
      end
    end
    

    这是由以下人员生成的:rails g model task creator:references responsible:references

    这将在您的数据库中创建一个包含两列的tasks 表:creator_idresponsible_id。默认情况下,Ruby on Rails 会认为这些列引用了两个 ActiveRecord 模型,CreatorResponsible。但是,由于您希望这些引用您的 User 模型,您需要将以下内容添加到您的 Task 模型中:

    app/models/tasks.rb

    class Tasks < ActiveRecord::Base
      belongs_to :creator, :class_name => 'User'
      belongs_to :responsible, :class_name => 'User'
    end
    

    这将告诉 Ruby on Rails 使用 User 模型来处理这些关系。因此,当您执行 task.creator 之类的操作时,您将获得 User 模型,task.responsible 也是如此。

    【讨论】:

    • 感谢,并 +1 提到控制台版本。我虽然必须编辑迁移以添加索引和参考位。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多