Ruby on rails Rails 4活动记录连接并包括不工作
我有两种型号:Place和SubfilterRuby 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:子过滤器 位置。包括:副过滤器 救命啊!如果您需要更多信息,请告诉我。它应该会产生相同的结果,但是这两个语句的作用并不完全相同
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