Ruby On Rails脚手架需要包含外键吗?

时间:2014-11-07 11:47:19

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.1

我正在学习轨道上的ruby的基础知识,我想做一些简单的查询,但我有一个疑问:

我将拥有这些模型:

class Client < ActiveRecord::Base
  has_one :address
  has_many :orders
  has_and_belongs_to_many :roles
end

class Address < ActiveRecord::Base
  belongs_to :client
end

class Order < ActiveRecord::Base
  belongs_to :client, counter_cache: true
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :clients
end

现在,我将使用scaffold生成所有内容,我想知道是否必须直接将外键放在脚手架中,例如:

rails生成脚手架地址街:字符串编号:整数client_id:整数

或者当我创建这些关联然后迁移我的数据库时,它们将是隐式的吗?

我不知道我是否以最好的方式解释自己。

由于

2 个答案:

答案 0 :(得分:10)

是的,没有参考。您需要传递client_id或对客户模型的引用,例如:

rails generate scaffold Address street:string number:integer client_id:integer:index 

rails generate scaffold Address street:string number:integer client:references

答案 1 :(得分:0)

或者,在 rails 4 中,你可以这样使用belongs_to:

假设您的应用程序中有用户模型

rails g scaffold comment belongs_to:user text:string

它会在您的migrate文件夹中生成该类:

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.string :text
      t.belongs_to :user, index: true, foreign_key: true
      t.timestamps null: false
    end
  end
end

您应该执行rake db:migrate然后,此命令将 user_id 属性创建为数据库表中的索引列。