拥有并属于许多Rails 4

时间:2015-04-14 23:39:30

标签: ruby-on-rails ruby activerecord associations

我想在两个模型之间建立多对多的关系,我想知道一步一步做什么。我想解释如何进行迁移以及如何理想地创建模型。我现在正在尝试做的方式是:

我在Ruby命令行中创建了两个模型:

rails g model Location name:string
rails g model Datetime date:datetime

现在我必须打开最近创建的模型并添加:

//models/location.rb
class Location < ActiveRecord::Base
    has_and_belong_to_many :datetimes
end

//models/datetime.rb
class Datetime< ActiveRecord::Base
    has_and_belong_to_many :locations
end

现在显然我必须进行迁移,但我不明白它是什么,而且我想最老版本的一些来源确实让我感到困惑。有人可以详细解释一下吗?

Obs:有一些类似的问题他们没有回答我的问题,因为他们没有深入解释该怎么做。

1 个答案:

答案 0 :(得分:1)

正如ruby教程所建议的,我们生成了一个新的迁移:

rails g migration CreateDatetimesAndLocations

在此迁移中,我有:

class CreateDatetimesAndLocations < ActiveRecord::Migration
    def change
      create_table :locations_datetimes, id:false do |t|
        t.belongs_to :datetime, index: true
        t.belongs_to :location, index: true
      end
    end
end

这与ruby教程完全相同。现在我有了这个控制器,我正在测试,它就是这样:

class WeatherController < ApplicationController
  def data
     @location = Location.new
     @location.name = "test"
     @datetime = Datetime.new
     @datetime.date = DateTime.new(2001,2,3)
     @location.datetimes << @datetime // **PROBLEM ON THIS LINE**
     @location.save

     @location = Location.new
     @location.name = "teste2"
     @location.locations << @location
     @locations = Location.all //(show locations in view)
  end
end

我遇到的问题是因为locations_datetimes必须是datetimes_locations(显然是按字母顺序)。