获取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)
- 通过Active Admin使用HABTM或Has_many
- Rails 4:保存子记录ID但不保存其属性,使用带有has_many关系的嵌套表单
- Has_Many:通过或:finder_sql
- has_many通过与现有对象/ ActiveRecord的关联
- HMT collection_singular_ids =删除连接模型是直接的,不会触发销毁回调
- Rails STI和has_many通过关联不起作用,SQLException:没有这样的表
- 友谊has_many通过模型与多个状态’
- ActiveRecord has_many:通过在批量分配上复制计数器缓存
- 动态创建has_many或habtm的after_add和after_remove回调?