如何解决通过Rails在has_many上添加其他属性
我已经建立了以下关联:
class BookLaunch < ApplicationRecord
has_many :book_launch_locations,dependent: :destroy
has_many :stores,through: :book_launch_locations
....
class Store < ApplicationRecord
has_many :book_launch_locations
has_many :book_launch,through: :book_launch_locations
....
class BookLaunchLocation < ApplicationRecord
belongs_to :book_launch,:touch => true
belongs_to :store
end
BookLaunchLocation具有一个名为book_price
的属性。
create_table "book_launch_locations",id: :integer,options: "ENGINE=InnoDB DEFAULT CHARSET=utf8",force: :cascade do |t|
t.integer "book_launch_id",null: false
t.integer "store_id",null: false
t.integer "book_price",default: 1,null: false
...
t.index ["book_launch_id","store_id"],name: "pair_uniqueness",unique: true
t.index ["book_launch_id"],name: "index_book_launch_locations_on_book_launch_id"
t.index ["store_id"],name: "index_book_launch_locations_on_store_id"
end
我想将book_price
添加到BookLaunch模型中的存储中,以便在我调用时
@book_launch.stores
,它将具有商店的所有属性+ book_price
属性。
这可能吗?
我使用fastJsonApi这样称呼它:
options = {
include: [:book_launch,:'book_launch.properties']}
json = Api::launchSummarySerializer.new(summaryData,options).serialized_json
render json: json
解决方法
如果要创建一个包含更多行的联接模型行,则只需显式而不是隐式即可创建它。
store = Store.first
book_launch = BookLaunch.first
BookLaunchLocation.create(
store: store,book_launch: book_launch,price: 999
)
# or
store.book_launch_locations.create(
book_launch: book_launch,price: 999
)
# or
book_launch.book_launch_locations.create(
store: store,price: 999
)
隐式创建连接模型行是通过间接关联创建的:
Store.first.book_launches.create!(attributes)
BookLaunch.first.stores.create!(attributes)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。