Ruby on rails Ruby有许多模型关联不起作用

Ruby on rails Ruby有许多模型关联不起作用,ruby-on-rails,ruby,activerecord,model-associations,Ruby On Rails,Ruby,Activerecord,Model Associations,这里有两个表properties和property\u images我想将这两个表关联起来 属性 id name status other-columns-here id property_id image status 属性\u图像 id name status other-columns-here id property_id image status 这是代码- class Property < ActiveRecord::Base has_many :property_

这里有两个表
properties
property\u images
我想将这两个表关联起来

属性

id
name
status
other-columns-here
id
property_id
image
status
属性\u图像

id
name
status
other-columns-here
id
property_id
image
status
这是代码-

class Property < ActiveRecord::Base
  has_many :property_images, dependent: :destroy
end


class PropertyImage < ActiveRecord::Base
  belongs_to :property
end

我试过
有很多关联,但只得到
属性
数据。请帮助我

我认为您需要使用:include=>:property\u图像以便在查询属性时立即加载


您可以将其放入查询的参数中。可能只需要使用Property.find

我认为您需要使用:include=>:Property\u图像在查询属性时立即加载

您可以将其放入查询的参数中。可能只需要使用属性。查找请尝试以下操作:

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%>

查看图像和数据
尝试以下方法:

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%>

查看图像和数据

这两个模型是正确关联的,但是,如果要访问属性图像而不在视图中进行任何额外查询,可以通过以下三种方法执行此操作:

@properties = Property.includes(:property_images)

@properties = Property.eager_load(:property_images)

@properties = Property.preload(:property_images)
您可以在以下内容中阅读有关加载/预加载的更多信息

您还可以向属性模型添加一个作用域,以便更轻松地访问它们(并且通过不反复重复相同的代码节省一点时间)

在属性模型中添加以下内容

scope :with_property_images,-> {joins(:property_images)}
然后,您可以通过调用所述作用域来访问预加载图像的属性


更新:如果使用rails 4,则必须将作用域包装在lambda中。我已经更新了范围代码,它应该可以在rails 3和rails 4上工作。

这两个模型正确关联,但是,如果您想访问属性图像而不在视图中进行任何额外查询,可以通过以下三种方法来实现:

@properties = Property.includes(:property_images)

@properties = Property.eager_load(:property_images)

@properties = Property.preload(:property_images)
您可以在以下内容中阅读有关加载/预加载的更多信息

您还可以向属性模型添加一个作用域,以便更轻松地访问它们(并且通过不反复重复相同的代码节省一点时间)

在属性模型中添加以下内容

scope :with_property_images,-> {joins(:property_images)}
然后,您可以通过调用所述作用域来访问预加载图像的属性

更新:如果使用rails 4,则必须将作用域包装在lambda中。我已经更新了作用域代码,它应该可以在rails 3和rails 4上运行。

试试这个控制器

# 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 %>
#view.html.erb
试试这个控制器

# 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 %>
#view.html.erb

尝试以下控制器并查看

# users_controller.rb
def index
   @properties = Property.includes(:property_images).order(:id)
end
在您看来,您需要为每个属性而不是属性

#properties.html.erb
<% @properties.each do |p| %>
   <% p.property_images.each do |image| %>
      <%= image.id %>
   <% end %>
<% end %>
#properties.html.erb

尝试以下控制器并查看

# users_controller.rb
def index
   @properties = Property.includes(:property_images).order(:id)
end
在您看来,您需要为每个属性而不是属性

#properties.html.erb
<% @properties.each do |p| %>
   <% p.property_images.each do |image| %>
      <%= image.id %>
   <% end %>
<% end %>
#properties.html.erb


是否要在每个属性中包含属性图像?是的,我想将每个属性包含在有许多关联的属性中。您实际询问的内容在英语中不清楚。我的意思是无意冒犯(我的妻子是外国人,非常熟悉这个问题:),但也许可以试着改写这个问题。上面的代码成功地“关联”了这两个表。我想问为什么“用户”控制器中的索引显示属性。也许您需要使用嵌套属性?您是如何加载属性和属性图像数据的?@Chinu如果有任何答案帮助您,请将其标记为已接受的答案:)您想在每个属性中包含属性图像吗?是的,我想将每个属性都包含在有许多关联中。您实际提出的问题在英语中不清楚。我的意思是无意冒犯(我的妻子是外国人,非常熟悉这个问题:),但也许可以试着改写这个问题。上面的代码成功地“关联”了这两个表。我想问为什么“用户”控制器中的索引显示属性。也许您需要使用嵌套属性?您如何加载属性和属性图像数据?@Chinu如果有任何答案帮助您,请将其标记为已接受的答案:)我将在哪里使用
:include=>:属性图像
?我将在哪里使用
:include=>:属性图像
查看图像和数据
不起作用。未定义的方法`each'用于查看图像&数据
不起作用。当我渲染
属性
属性图像时,#的未定义方法'each'未出现记录你能否发布你正在使用的当前代码和输出(@properties.inspect)please.render html:@properties.inspect您如何调用_property_images scope?让我们来看看。当我渲染
properties
property_images记录时,您能否发布您正在使用的当前代码和输出(@properties.inspect)please.render html:@properties.inspectAnd您如何使用_property_images scope调用?让我们看看。