这是两个表properties
和property_images
我想关联两个表。
属性
id
name
status
other-columns-here
property_images
id
property_id
image
status
这是代码 -
class Property < ActiveRecord::Base
has_many :property_images, dependent: :destroy
end
class PropertyImage < ActiveRecord::Base
belongs_to :property
end
users_controller.rb
def index
@properties = Property.order('id');
render html:@properties #13 properties coming
end
我尝试了has_many
关联,但只提供了properties
数据。请帮帮我
答案 0 :(得分:1)
两个模型正确关联,但是,如果要在视图中不进行任何额外查询而访问property_images,可以通过以下三种方法进行:
@properties = Property.includes(:property_images)
@properties = Property.eager_load(:property_images)
@properties = Property.preload(:property_images)
您可以在以下blog
中详细了解预先加载/预加载您还可以在属性模型中添加范围,以便更轻松地访问它们(并且不会一遍又一遍地重复相同的代码,从而节省一点时间。)
在您的房产模型中添加以下内容
scope :with_property_images,-> {joins(:property_images)}
然后,您可以通过调用所述范围来访问带有预加载图像的属性。
更新:如果您使用的是rails 4,则范围必须包含在lambda中。我已经更新了范围代码,它应该适用于第3和第4个轨道。
答案 1 :(得分:1)
试试这个控制器
# controller.rb
def index
@properties = Property.includes(:property_images)
end
并查看
#view.html.erb
<% @properties.each do |p| %>
<% p.property_images.each do |image| %>
<%= image.id %>
<% end %>
<% end %>
答案 2 :(得分:0)
我认为您需要使用:include =&gt; :property_images在查询属性时急切加载
你会把它放在查询的参数中。可能只需要使用Property.find
答案 3 :(得分:0)
尝试以下方法:
def index
@properties = Property.includes(:property_images).order('id');
#render html:@properties #13 properties coming
end
查看图片:
<% @properties.each do |p| %>
<% p.each do |image| %>
view image & data
<% end %>
<%end%>
答案 4 :(得分:0)
尝试以下控制器并查看
# users_controller.rb
def index
@properties = Property.includes(:property_images).order(:id)
end
在您的视图中,您需要为property_images设置每个属性,
#properties.html.erb
<% @properties.each do |p| %>
<% p.property_images.each do |image| %>
<%= image.id %>
<% end %>
<% end %>