2014-08-30 148 views
0

我正在創建一個市場應用程序,賣家可以列出要出售的項目。我正在創建賣家網頁 - 這是一個包含賣家個人資料和特定商家信息的網頁。Rails 4 - 從一個模型調用另一個模型的值

我已經儘可能使用賣家列表創建頁面,但無法拉入另一個模型中的名稱和個人資料信息。

對於這裏的上下文,我有2個模型 - 一個列表模型和一個用戶模型。列表模型具有與用戶表聯接的user_id。用戶表具有名稱,profile_image,profile_description。

我routes.tb:

get '/listings/s/:id' => 'listings#vendor', as: 'vendor' 

我listings_controller.rb:

def vendor 
    @listings = Listing.where(user: User.find(params[:id])) 
    end 

我的觀點:需要注意的是在第一線以下我有???。我想在這裏拉入user.name,這是賣家的名字。我如何拉入?一旦我知道了,我可以使用相同的流程從用戶模型中抽取其他字段。

<h4>Listings for ??? </h4> 

<div class="center"> 
    <div class="row"> 
    <% @listings.each do |listing| %> 
    <div class="col-md-3 col-sm-3 col-xs-6"> 
     <div class="thumbnail" > 
      <%= link_to image_tag(listing.image.url(:medium), class: "img-responsive"), listing, data: { no_turbolink: true } %> 
     </div> 
     <div class="caption"> 
      <h3><%= link_to listing.name.downcase.titleize, listing, data: { no_turbolink: true } %></h3> 
      <p><%= number_to_currency(listing.price) %></p> 
     </div> 
    </div> 
    <% end %> 
    </div> 
</div> 

回答

1

您可以爲用戶設置另一個實例變量。例如:

def vendor @user = User.find(params[:id]) @listings = Listing.where(user: @user) end

,然後在視圖:

<h4>Listings for <%= @user.name %> </h4>

+0

我downvoted(對不起),因爲雖然這會工作,但它不是最有效的方法 – 2014-08-30 08:56:54

+0

瑞克你說得對,你的解決方案提供了一種更加習慣解決問題的方式。它也解決了真正的問題 - 不理解協會。 – Ahmed 2014-08-30 13:37:49

1

協會

你會是最好看的了約ActiveRecord Associations

ActiveRecord的是ORM (Object Relationship Mapper) ,它爲應用程序的對象關聯提供了一個抽象級別。這一點的重要性是,如果你使用正確的話,只會讓Rails的運行速度更快,同時也保證你的代碼是簡潔:

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_many :listings 
end 

#app/models/listing.rb 
class Listing < ActiveRecord::Base 
    belongs_to :user 
end 

這意味着,如果你調用一個@user對象,你會能夠調用關聯數據量太大,像這樣:

def vendor 
    @user = User.find params[:id] 
    @listings = @user.listings 
end 

的這個值是該協會隨後照顧與ActiveRecord(不在你的控制)。如果你因此會更改協會(改款車型等),你就會有一個地方進行必要的更改,而不必再通過所有的控制器來接


對象

要給你一個更好的理解,你需要在Rails應用中考慮objects的角色。

由於Rails建立在Ruby之上(它是一個gem),它是一個object orientated框架。面向對象意味着不僅僅是一個流行語 - 這是一個編程的整個實踐;把對象爲您的軟件在流的中心(而不是一個邏輯驅動的流程):

enter image description here

在現實中,對象僅僅用了很多的JSON-音符數據的內部變量,包括類似數據類型的東西等。Rails在你的模型中填充對象,允許你在各種Rails輔助方法中使用對象,如form_for等。

這個很重要的原因是因爲對象的方向作品。你可以聯想對象,操縱它們&摧毀它們。這意味着你在Rails中做的任何事情都應該基於大約的對象,這就是爲什麼我上面提到的關聯如此重要的原因

相關問題