目前我有2个模型,通过连接表有多对多的关系。
class Deal < ActiveRecord::Base
has_many :deal_venues, :dependent => :destroy
has_many :venues, through: :deal_venues
end
class Venue < ActiveRecord::Base
has_many :deal_venues, :dependent => :destroy
has_many :deals, through: :deal_venues
end
class DealVenue < ActiveRecord::Base
belongs_to :deal
belongs_to :venue
end
这是我对这些模型的架构
create_table "deals", force: true do |t|
t.string "name_of_deal"
t.string "type_of_deal"
t.string "description"
t.date "start_date"
t.date "expiry_date"
t.string "t_c"
t.boolean "pushed"
t.boolean "redeemable"
t.boolean "multiple_use"
t.string "image"
t.datetime "created_at"
t.datetime "updated_at"
t.string "location"
end
create_table "venues", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "location"
end
create_table "deal_venues", force: true do |t|
t.integer "deal_id"
t.integer "venue_id"
t.datetime "created_at"
t.datetime "updated_at"
end
我的问题是这个。 由于我的deal_id和venue_id仅在联系表,deal_venues中,我如何在交易和场地之间查询,因为我没有每个模型的ID? 例如,如果我在查询场地内特定位置提供的交易,我该怎么做? 或许,我希望查询我的交易所在的位置。
对不起新手的问题,因为我对rails很新。谢谢!
答案 0 :(得分:1)
首先,通常当人们说Rails中的多对多关系时,他们的意思是has-and-belongs-to-many。您正在使用has-many-through关系。通常情况下,这是对多对多进行建模的正确方法,只要确保你称之为现实。
Rails(特别是ActiveRecord)将在每个表上自动创建id
列。所以id
和deals
上有venues
,您可以这样做:
venue_id = <some-id>
venue = Venue.find(venue_id)
# get all the deals for the venue
deals = venue.deals
答案 1 :(得分:0)
您有@deal = Deal.find(2)
现在,您需要
@venues = @deal.venues
要查看SQL查询,您需要
puts @deal.venues.explain