具有多个belongs_to和命名的模型

时间:2011-09-03 09:35:48

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

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

所以我有一个任务模型。

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

我当然可以调用我的属性:creator:integer,和Responsable:integer,但是这样做的首选rails方式是什么?

它们应该只调用上面的,还是createor_user_id:integer,还是应该用user_id和task_id创建一个关系表,然后是角色?

感谢Rails新手:)

1 个答案:

答案 0 :(得分:2)

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

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。默认情况下,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

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