为数据库rails创建迁移和模型4

时间:2014-07-20 09:42:28

标签: ruby-on-rails ruby activerecord

我尝试创建此enter image description here

用户是one to manyIncomePicture的{​​{1}},而ExpensePicture和IncomePicture与ExpensePictureIncomeText具有一对一的关系。这就是我到目前为止所拥有的。我对迁移实际上做了什么有点困惑?我的猜测是它更新了数据库中的表。我觉得我在迁移中遗失了很多,以便在我的数据库中创建所需的方案。我认为我的模型还可以,但我不太确定。我对ExpenseText命令感到困惑。似乎该命令更新或更改表列

型号:

rails g migration ...

移植

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :rememberable, :validatable

  has_many :expense_pictures 
  has_many :income_pictures

end

class IncomePicture < ActiveRecord::Base
  belongs_to :user
  mount_uploader :image, ImageUploader
  has_one :income_text
end

class IncomeText < ActiveRecord::Base
  belongs_to :income_pictures
end

class ExpensePicture < ActiveRecord::Base

  belongs_to :user
  mount_uploader :image, ImageUploader
  has_one :expense_text
end

class ExpenseText < ActiveRecord::Base
  belongs_to :expense_pictures
end

1 个答案:

答案 0 :(得分:1)

您需要通过迁移添加的唯一内容是外键。 Rails将负责协会,因此它将在那之后全部工作。

class AddForeignKeysToTables < ActiveRecord::Migration
  def change
    add_column :income_pictures, :user_id, :integer
    add_column :expense_pictures, :user_id, :integer
    add_column :expense_texts, :expense_picture_id, :integer
    add_column :income_texts, :income_picture_id, :integer
  end
end

你也可以这样做......

add_reference:products,:user,index:true

class AddForeignKeysToTables < ActiveRecord::Migration
  def change
    add_reference :income_pictures, :user
    add_reference :expense_pictures, :user
    add_reference :expense_texts, :expense_picture
    add_reference :income_texts, :income_picture
  end
end

实际上你可以为外键添加一个索引......

add_reference :income_pictures, :user, index: true