将关联从has_many转换为has_one

时间:2015-07-13 11:54:47

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

我有两个相关的模型TripPlan和Place。

class TripPlan < ActiveRecord::Base
  has_many :places
end

class Place < ActiveRecord::Base
  belongs_to :trip_plan
end

对于places表有相应的迁移:

class CreatePlaces < ActiveRecord::Migration
  def change
    create_table :places do |t|
      t.references :trip_plan, index: true

      t.timestamps null: false
    end
  end
end

因此每个TripPlan可以有多个地方,每个地方都属于一个旅行计划。但是现在我需要这些模型之间的has_one / belongs_to关系。我按如下方式修改了TripPlan模型:

class TripPlan < ActiveRecord::Base
  has_one :place
end

但是现在如果我尝试TripPlan.find(1).place.build它会抛出一个错误:

undefined method 'build' for nil:NilClass

1 个答案:

答案 0 :(得分:2)

使用has_one获得的方法不同

TripPlan.find(1).build_place

您还将获得create_place方法