Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 Rails 4活动记录连接并包括不工作_Ruby On Rails_Activerecord_Join_Ruby On Rails 4_Model Associations - Fatal编程技术网

Ruby on rails Rails 4活动记录连接并包括不工作

Ruby on rails Rails 4活动记录连接并包括不工作,ruby-on-rails,activerecord,join,ruby-on-rails-4,model-associations,Ruby On Rails,Activerecord,Join,Ruby On Rails 4,Model Associations,我有两种型号:Place和Subfilter class Place < ActiveRecord::Base belongs_to :subfilter end class Subfilter < ActiveRecord::Base has_many :places end 以下两个查询返回的值与Place.all相同 Place.joins:子过滤器 位置。包括:副过滤器 救命啊!如果您需要更多信息,请告诉我。它应该会产生相同的结果,但是这两个语句的作用并不完全相同

我有两种型号:Place和Subfilter

class Place < ActiveRecord::Base
  belongs_to :subfilter
end

class Subfilter < ActiveRecord::Base
  has_many :places
end
以下两个查询返回的值与Place.all相同

Place.joins:子过滤器 位置。包括:副过滤器
救命啊!如果您需要更多信息,请告诉我。

它应该会产生相同的结果,但是这两个语句的作用并不完全相同

Place.joins(:subfilter)
生成以下SQL

SELECT places.* FROM places INNER JOIN subfilters ON subfilters.place_id = places.id

Place.includes(:subfilter)
生成2条SQL语句

SELECT places.* FROM places

includes有助于快速加载,也就是说,如果您想在位置上循环,例如

@places.each do |place|
   puts place.subfilter.name
end
您可以在“连接表”和“快速加载”下阅读更多关于此的内容。

我不知道你期望它是什么。。。Place.includes:subfilter.wheresubfilter:{name:'subfilter 1'}将获取与名为'subfilter 1'的子筛选器关联的位置。嗨,Iceman,感谢您的输入。如果我想要一个表,其中每一行包含一个位置及其子过滤器的所有变量,您知道我需要做什么吗?e、 g.名称| lat | lng |标题,其中标题为副过滤器标题。谢谢您可以随时使用Place.find_by_sqlselect*。所有您需要的都来自places内部连接子过滤器places.id=subfilters.Place_id我真的建议您阅读本指南,它包含了关于Place的良好信息。连接:子过滤器生成内部连接而不是左外部连接@Octopus Paul good catch,从错误的位置复制,更正。
@places.each do |place|
   puts place.subfilter.name
end