Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 多对多模型之间的查询_Mysql_Ruby On Rails - Fatal编程技术网

Mysql 多对多模型之间的查询

Mysql 多对多模型之间的查询,mysql,ruby-on-rails,Mysql,Ruby On Rails,目前,我有两个模型,通过联接表具有多对多关系 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 h

目前,我有两个模型,通过联接表具有多对多关系

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
我的问题是。 由于我的交易id和场馆id仅在加入表中,交易场馆,由于我没有每个车型的id,如何在交易和场馆之间查询?
例如,如果我需要查询场馆特定地点内提供的交易,我该如何查询?
或者,我想询问我的交易地点


对于新手问题,我很抱歉,因为我对rails还很陌生。谢谢大家!

您有
@deal=deal.find(2)

现在,你需要

@venues = @deal.venues
要查看SQL查询,您需要

puts @deal.venues.explain

文档

首先,通常当人们说Rails中的多对多关系是他们的意思时。你在利用关系。通常情况下,这是建立多对多模型的正确方法,只是要确保你对事物的本来面目进行了描述

Rails(特别是ActiveRecord)将在每个表上自动创建一个
id
列。所以你在
交易
场馆
上有
id
,你可以这样做:

venue_id = <some-id>

venue = Venue.find(venue_id) 

# get all the deals for the venue
deals = venue.deals 
场馆标识=
地点=地点。查找(地点\u id)
#获取场地的所有交易
deals=地点.交易

我想可能有点小错误。例如,在Deal中,它没有场馆id。我尝试了deals=Deal.where(场馆id:venue\u id),但它不起作用。此外,deals=venture.deals也不起作用。显然,我需要对@venture=venture.find(venture\u id)进行“编码”,然后是deals=@venture.deals,这样就可以了。我能知道为什么会这样吗?
venue_id = <some-id>

venue = Venue.find(venue_id) 

# get all the deals for the venue
deals = venue.deals