Возможно, это проще, чем я думаю, но у меня проблемы с работой. У меня есть блокусловный 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 %>
любая помощь оценена.
В контроллере следует определить '@ animal',' @ previous_animal' и '@ next_animal'. Тогда ваша логика может просто запросить эти переменные. Возможно, вы также сможете загрузить их одним ударом. –
как @previous_animal = Animal.previous_animal? в качестве примера – Richlewis
'@previous_animal = @ animal.previous_animal' –