2015-09-03 25 views
0

我有一個叫lastthree.html.erb是針對所有制模型顯示數據頁。我有一個名爲_nextpick.html.erb的部分,也適用於所有權模型。軌道4 - 同一頁面上兩個表,查詢第二表忽略

在我ownerships_controller.rb,我有兩個定義:

def nextpick 
    @ownerships = Ownership.take(Rails.application.config.counter).last(1) 
end 

def lastthree 
    @ownerships = Ownership.take(Rails.application.config.counter - 1).last(3) 
end 

如果我讓nextpick自己的頁面(nextpick.html.erb),然後從菜單訪問它,它工作正常,我得到正確的結果。但是,如果我將它作爲lastthree.html.erb的一部分進行渲染,我會得到lastthree查詢的結果。它在頁面上的位置並不重要。

爲什麼nextpick查詢被忽略?無論如何要克服這一點?

兩個頁面都使用相同的代碼來顯示數據:

<% @ownerships.each do |ownership| %> 
    <tr> 
    <td></td> 
    <td><%= ownership.round %></td> 
    <td><%= ownership.pick %></td> 
    <td><%= image_tag ownership.team.logo.url(:medium) %></td> 
    <td><%= ownership.team.name %></td> 

    <% if ownership.player_id == nil %> 
    <% else %> 
     <td><%= ownership.player.name %></td> 
    <% end %> 
    </tr> 
<% end %> 
+1

「nextpick」在哪裏被調用?你是否期待'nextpick'被調用,因爲這是正在渲染的部分名稱?渲染局部不會導致任何控制器方法被調用。路由器決定調用哪個控制器方法,它將只調用一個控制器方法:匹配路由的方法。 –

+0

非常有幫助,我認爲渲染部分會導致調用控制器。是否不可能在同一頁上有兩個(或多個)表使用不同的查詢從相同的數據庫表中繪製數據? – SeattleDucati

回答

1

如果我理解正確。你的問題是,你期望你的兩個控制器方法被調用,但它不會那樣工作。

當你訪問一個網址,軌知道調用根據您的routes.rb文件的配置什麼的控制器和控制什麼行動。

既然你訪問的網址lastthree(我想,如果你是以下約定應該被命名爲last_three)你的路徑可能類似於/ lastthree。根據您所描述的行爲,我想你有這樣的事情在你的routes.rb文件

get '/lastthree', to: 'ownerships#lastthree' 
get '/nextpick', to: 'ownerships#nextpick' 

的請求總是會映射到一個控制器動作。在最後三視圖中呈現nextpick部分的事實並不意味着nextpick方法完全被調用。根據請求的路線調用控制器方法,而不是基於視圖的渲染。

要回答你的問題:是的,你可以有兩個結果。但爲此,您需要在控制器中添加before_action或after_action回調來調用nextpick方法或直接從lastthree方法調用該方法。此外,您需要爲實例變量指定不同的名稱,否則最後調用的方法將最終覆蓋變量,最終會出現相同的情況。

你可能會考慮傳遞變量作爲當地人的意見,以避免您的看法取決於太多的實例變量。作爲一種良好的習慣,您應該只嘗試每個視圖使用一個實例變量。

+0

優秀的答案。謝謝! – SeattleDucati

相關問題