2014-10-02 5 views
0

Возможно, это проще, чем я думаю, но у меня проблемы с работой. У меня есть блокусловный link_to do block

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

link_to Но я только хочу, чтобы показать ссылку, если previous_animal существует

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

обычно в пределах link_to я мог бы просто сделать

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

Но я получаю undefined method 'name', когда я добавляю предложение 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'. Тогда ваша логика может просто запросить эти переменные. Возможно, вы также сможете загрузить их одним ударом. –

+0

как @previous_animal = Animal.previous_animal? в качестве примера – Richlewis

+0

'@previous_animal = @ animal.previous_animal' –

ответ

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

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  
Смежные вопросы