2014-10-02 36 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