获取has_many:x,:through =>:y的问题在控制台中工作

创建新的Rails应用程序(终端)

rails new hmt cd hmt 

生成模型,脚手架,数据库架构等(终端)

 rails g model magazine name rails g model reader name rails g model subscription magazine:references reader:references 

根据生成的DB模式(终端)创建表

 rake db:migrate 

检查表是否已创建好(终端)

 rails c 

(Rails控制台)

 Magazine.column_names Reader.column_names Subscription.column_names 

在models /(magazine.rb)中指定关系

 class Magazine  :subscriptions end 

(reader.rb)

 class Reader  :subscriptions end 

(subscription.rb)

 class Subscription < ActiveRecord::Base belongs_to :reader belongs_to :magazine end 

添加一些数据(Rails控制台)

 vogue = Magazine.create!(:name => "Vogue") bob = Reader.create!(:name => “Bob”) bob.subscriptions << vogue 

最后一行产生错误

 ActiveRecord::AssociationTypeMismatch: Subscription(#70321133559320) expected, got Magazine(#70321133295480) 

我究竟做错了什么?

这里bob.subscription要求vogue成为Subscription模型的对象,因此会出现错误。 因此,而不是这样创建新的订阅: – Subscription.create(magazine_id:vogue.id,reader_id:bob.id)