问题描述
创建新的Rails应用(终端)
Create new Rails app (terminal)
rails new hmt
cd hmt
生成模型,支架,数据库模式等(终端)
Generate models, scaffolding, DB schema, etc (terminal)
rails g model magazine name
rails g model reader name
rails g model subscription magazine:references reader:references
根据生成的数据库架构(终端)创建表
Make tables based on generated DB schema (terminal)
rake db:migrate
检查是否已正确创建表(终端)
Check if tables are created ok (terminal)
rails c
(Rails控制台)
Magazine.column_names
Reader.column_names
Subscription.column_names
在模型/(magazine.rb)中指定关系
Specify relationships in models/ (magazine.rb)
class Magazine < ActiveRecord::Base
has_many :subscriptions
has_many :readers, :through => :subscriptions
end
(reader.rb)
(reader.rb)
class Reader < ActiveRecord::Base
has_many :subscriptions
has_many :magazines, :through => :subscriptions
end
(subscription.rb)
(subscription.rb)
class Subscription < ActiveRecord::Base
belongs_to :reader
belongs_to :magazine
end
添加一些数据(Rails控制台)
Add some data (Rails console)
vogue = Magazine.create!(:name => "Vogue")
bob = Reader.create!(:name => "Bob")
bob.subscriptions << vogue
最后一行产生错误
The last line there yields an error
ActiveRecord::AssociationTypeMismatch: Subscription(#70321133559320) expected, got Magazine(#70321133295480)
我在做什么错了?
推荐答案
在这里bob.subscription期望vogue成为Subscription模型的对象,因此会引发错误.因此,代替此方法,创建新的订阅为:-Subscription.create(magazine_id:vogue.id,reader_id:bob.id)
Here bob.subscription expects vogue to be an object of Subscription model hence it rises error. Hence instead of this create new Subscription as:-Subscription.create(magazine_id: vogue.id, reader_id: bob.id)
这篇关于在获取has_many:x,:through =>时遇到问题:y在控制台中工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!