相同的外键在表中使用了两次

时间:2014-11-08 22:36:49

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

我有以下表格

break_points

 id: integer
 break_point_name: string


 schedules

 id: integer
 departure: int  -> break_point_id 
 arrival:int     -> break_point_id
 departure_date:date
 arrival_date: date 

出发和到达都是断点。

然后我会创建一个关联*到*吗?

1.9.3-p547 :004 > s=Schedule.find(1)
  Schedule Load (0.1ms)  SELECT "schedules".* FROM "schedules" WHERE "schedules"."id" = ? LIMIT 1  [["id", 1]]
 => #<Schedule id: 1, departure_id: 1, departure_date: "2015-01-05", departure_time: 28800, arrival_id: 11, arrival_date: "2015-01-06", arrival_departure: 3600, bus_company_id: 1, created_at: "2014-11-08 22:55:00", updated_at: "2014-11-08 22:55:00"> 
1.9.3-p547 :005 > s.departure_break_points
  BreakPoint Load (0.3ms)  SELECT "break_points".* FROM "break_points" WHERE "break_points"."departure_id" = 1
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: break_points.departure_id: SELECT "break_points".* FROM "break_points"  WHERE "break_points"."departure_id" = 1
    from /home/fernando/.rvm/gems/ruby-1.9.3-p547@ticket_master/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `initialize'
    from /home/fernando/.rvm/gems/ruby-1.9.3-p547@ticket_master/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `new'
    from /home/fernando/.rvm/gems/ruby-1.9.3-p547@ticket_master/gems/sqlite3-1.3.10/lib/sqlite3/database.rb:91:in `prepare'

这些是我生成数据库表的迁移

class CreateSchedules < ActiveRecord::Migration
  def change
    create_table :schedules do |t|
      t.integer :departure_id
      t.date :departure_date
      t.time :departure_time
      t.integer :arrival_id
      t.date :arrival_date
      t.time :arrival_departure
      t.integer :bus_company_id
      t.timestamps
    end

  end
end

      class CreateBreakPoints < ActiveRecord::Migration
  def change
    create_table :break_points do |t|
      t.string :city
      t.integer :province_id
      t.timestamps
    end
  end
end
 and these are my models

这些是我的模特

 class BreakPoint < ActiveRecord::Base
      attr_accessible :break_point_name, :city
      belongs_to :province
    end

    class Schedule < ActiveRecord::Base
  has_many :departure_break_points,class_name: "BreakPoint", :foreign_key => 'departure_id', :dependent => :destroy
  has_many :arrival_break_points, class_name: "BreakPoint", :foreign_key => 'arrival_id', :dependent => :destroy
end

1 个答案:

答案 0 :(得分:0)

在模型中添加两​​个关系,但指定外键

  has_many :departure_break_points,class_name: "BreakPoint", :foreign_key => 'departure' :dependent => :destroy
  has_many :arrival_break_points, class_name: "BreakPoint", :foreign_key => 'arrival', :dependent => :destroy