2014-10-02 40 views
0

也許這比我想的簡單,但有問題得到這個工作。我有一個的link_to塊有條件的link_to塊

<%= link_to(@animal.previous_animal, {class: 'prev-page'}) do 
    <span class="glyphicon glyphicon-chevron-left"></span> Meet <span class="name"><%= @animal.previous_animal.name %></span>, the <%= animal_breed(@animal.previous_animal) %> 
<% end %> 

但我只想要顯示的鏈接,如果一個previous_animal一個的link_to中存在

def previous_animal 
animal = self.class.order('created_at desc').where('created_at < ?', self.created_at) 
animal.last if animal 
end 

通常我可以做

<%= link_to(@animal.previous_animal) if @animal.previous_animal %> 

但我正在逐漸未定義的方法'名稱'當我添加if子句,所以它仍然運行<%= @ animal.previous_animal.name%>,即使我認爲它是在if語句內?

<%= link_to(@animal.previous_animal, {class: 'prev-page'}) if @animal.previous_animal do 
    <span class="glyphicon glyphicon-chevron-left"></span> Meet <span class="name"><%= @animal.previous_animal.name %></span>, the <%= animal_breed(@animal.previous_animal) %> 
<% end %> 

任何幫助表示讚賞。

+0

您應該在控制器中定義'@ animal','@ previous_animal'和'@ next_animal'。那麼你的邏輯就可以查詢這些變量。您也可以在一次點擊中加載它們。 – 2014-10-02 14:05:09

+0

像@previous_animal = Animal.previous_animal?作爲一個例子 – Richlewis 2014-10-02 14:16:03

+0

'@previous_animal = @ animal.previous_animal' – 2014-10-02 14:49:19

回答

1
<% if @animal.previous_animal %> 
    <%= link_to(@animal.previous_animal, class: 'prev-page') do %> 
    <span class="glyphicon glyphicon-chevron-left"></span> Meet <span class="name"><%= @animal.previous_animal.name %></span>, the <%= animal_breed(@animal.previous_animal) %> 
    <% end %> 
<% end %> 
+1

謝謝,我早些時候嘗試過,但沒有喜悅,因此我爲什麼把這個問題提出來,以爲我瘋了...,必須有一個錯字,無論如何都工作 – Richlewis 2014-10-02 13:42:34

0

您的link_to如果塊混淆,並且它會導致您的問題,因爲即使沒有記錄顯示內容。我會這樣做:

#controller 
@animal = Animal.find_by_id(params[:id]) 
@previous_animal = @animal && @animal.previous_animal 
@next_animal = @animal && @animal.next_animal 

#view 
<% if @previous_animal %> 
    <%= link_to(@previous_animal, {class: 'prev-page'}) do 
    <span class="glyphicon glyphicon-chevron-left"></span> Meet <span class="name"><%= @previous_animal.name %></span>, the <%= animal_breed(@previous_animal) %> 
    <% end %> 
<% else %> 
    <!-- anything you might want to render if there's no previous animal --> 
<% end %> 

此外您的previous_animal方法可以整理一下。

#model 
def previous_animal 
    Animal.order('created_at desc').where('created_at < ?', self.created_at).first 
end 

def previous_animal 
    Animal.order('created_at').where('created_at > ?', self.created_at).first 
end