Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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
Ruby on rails 外部3向连接导轨_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 外部3向连接导轨

Ruby on rails 外部3向连接导轨,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有3种型号,如: location, user, discovered_location(location_id,user_id) 我想我需要一个外部连接来获取所有位置,如果用户已经发现了位置,还需要包括发现的位置模型 我需要类似于{location1,location2,location3:includescovered_location,location4..} 有没有一种方法可以做到这一点?如果没有,最好的方法是什么 编辑 我想为某个用户获取上面指定的位置。为了更好地说明,应该是: 用

我有3种型号,如:

location, user, discovered_location(location_id,user_id)
我想我需要一个外部连接来获取所有位置,如果用户已经发现了位置,还需要包括发现的位置模型

我需要类似于
{location1,location2,location3:includescovered_location,location4..}

有没有一种方法可以做到这一点?如果没有,最好的方法是什么

编辑

我想为某个用户获取上面指定的位置。为了更好地说明,应该是:

用户
{location1,location2,location3:包括发现的位置,location4..}


(用户有许多已发现的位置)

您只能通过在
连接方法中使用SQL文本在Rails中进行外部连接:

joins("OUTER JOIN table2 on table2.column = table1.column")

您需要检查查找到的位置表中的用户id是否等于相关用户的id,或者是否为空。这是很容易做到的宝石。鉴于以下模型:

class User < ActiveRecord::Base
  has_many :discovered_locations
  has_many :locations, :through => :discovered_locations
end

class Location < ActiveRecord::Base
  has_many :discovered_locations
  has_many :users, :through => :discovered_locations
end

class DiscoveredLocation < ActiveRecord::Base
  belongs_to :user
  belongs_to :location
end

联接
进行内部联接,
包含
进行外部联接


AR将执行外部联接,如果您使用
includes
方法,并在包含的表上使用条件。thanx,这似乎与BossLocation.joins类似(“发现的位置上的左外部联接发现的位置。boss\u位置\u id=boss\u位置.id”)Dave,我无法找到正确的包含/连接组合来获得像这样的外部连接mysql:选择
boss\u locations
*,
discovered\u locations
*FROM
boss\u locations
左外部连接discovered\u locations ON discovered\u locations.id;嗯,实际上没有,我想我做错了。我想获取某个用户的所有位置以及发现的。Ryan,我如何才能使此加入为某个用户工作?我目前有“BossLocation.joins”(“发现的位置上的左外部联接发现的位置。boss\u位置\u id=boss\u位置.id”)”,但这与特定的用户\u id不相关。
Location.includes(:discovered_locations).where(
  {:discovered_locations => {:user_id => User.first.id}} | 
  {:discovered_locations => {:user_id => nil}}
).each do |loc|
  puts "#{loc.name} #{loc.discovered_locations.empty? ? 'not visited' : 'visited'}"
end