Ruby on rails 按关系乘以记录
这是我的关系:Ruby on rails 按关系乘以记录,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,Ruby On Rails 3.2,这是我的关系: class House has_many: appartments end class Appartments belongs_to: house end class Region has_many: houses end 控制器: @country = Country.find(params[:country_id]) @regions = @country.regions @house = House.find(params[:id]) 看法 在房屋页面上,我有
class House
has_many: appartments
end
class Appartments
belongs_to: house
end
class Region
has_many: houses
end
控制器:
@country = Country.find(params[:country_id])
@regions = @country.regions
@house = House.find(params[:id])
看法
在房屋页面上,我有一个标签,我想显示属于房屋的公寓
这是我的循环:
- @regions.each do |region|
- region.houses.each do |house|
- @house.appartments.each do |appartment|
%section
.row
.span5
%h2 #{link_to appartment.name, country_region_appartment_path(@country, region, appartment)}
%p
我创建这个循环是因为我需要链接的区域值。我得到了属于这所房子的公寓,但我将记录/输出相乘
我做错了什么
谢谢..remco您认为
@house
与地区无关。house
。在一个区域的所有房屋中循环,然后使用控制器@house
此外,我认为还缺少一些关联:
class Region
has_many: houses
belongs_to :country
end
class House
has_many :appartments
belongs_to :region
end
class Appartment
belongs_to :house
end
在控制器上,您只需查询以下区域:
@country = Country.find(params[:country_id])
@regions = @country.regions
在您看来,您应该从房屋中删除@
,因为它只引用一个预定义房屋:
- @regions.each do |region|
- region.houses.each do |house|
- house.appartments.each do |appartment|
这是一种原始的方法,因为它会根据需要触发许多查询。如果你有很多记录,您可以从
ActiveRecord
中使用类似于include
和join
的东西来查看如何快速加载您的数据。您能否更准确地说明您的问题/您希望得到什么?我想展示属于该房屋的公寓……它可以工作,但它可以多次显示公寓appartments=@regions.flat_-map(&:houses).flat_-map(&:appartments).uniq
然后用在上面循环。每个嘿,Remco,如果这是,或者可能会是,一个协作的努力-你不应该有像模型这样大的东西拼写错误。你的公寓
模型实际上应该是公寓
。但是你的选择。我试过了,但后来我从该地区得到了所有的公寓,而不是从Murifo家……谢谢……我试过你的想法,但后来我从该地区得到了所有的公寓。。。