2016-04-22 48 views
0

這裏是兩個表propertiesproperty_images我想關聯這兩個表。紅寶石has_many模型協會不工作

性質

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

您是否想要將每個屬性的屬性圖像包含在內? –

+0

是的,我想包括has_many協會的每個財產 – Chinmay235

+0

你實際要求的英語不清楚。我的意思是沒有進攻(我的妻子是外國人,對這個問題非常熟悉:)但也許試圖重新說明問題。上面的代碼成功「關聯」了這兩個表。我會質疑爲什麼你的「用戶」控制器中的索引顯示屬性。也許你需要使用嵌套屬性?你如何加載Property和PropertyImage數據? –

回答

1

兩個模型正確關聯,但是,如果你要訪問的property_images沒有在視圖中做任何額外的查詢,您可以通過以下三種方法來實現:

@properties = Property.includes(:property_images) 

@properties = Property.eager_load(:property_images) 

@properties = Property.preload(:property_images) 

您可以閱讀更多關於eagerloading /在以下blog

預緊您還可以將範圍添加到您的屬性模型,能夠更容易地訪問它們(和不重複相同的代碼節省你的時間一點點再次)。

在你的屬性模型添加以下

scope :with_property_images,-> {joins(:property_images)} 

然後你就可以通過調用訪問預裝的圖像特性,據稱範圍。

更新:如果您使用的是導軌4,則範圍必須包裝在lambda中。我更新了範圍代碼,它應該在第3和第4軌上工作。

+0

範圍錯誤'範圍正文需要被調用.' – Chinmay235

+0

請參閱我的更新回答。 – Waclock

+0

雖然我呈現'屬性'''property_images'記錄不來 – Chinmay235

0

我認爲你需要使用:包括=>:property_images躍躍欲試負載,當你查詢性能

你會把這在PARAMS的查詢。可能只需要使用Property.find

+0

我將在哪裏使用':include =>:property_images'? – Chinmay235

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

'<%p.each do | image | %> 查看圖像和數據 <% end %>'不工作。 – Chinmay235

+0

未定義的方法'每個'for#<屬性:0x765f330> – Chinmay235

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