Чередование показа двух изображений в представлении Rails

#ruby-on-rails #erb

#ruby-on-rails #erb

Вопрос:

Во-первых, я приношу извинения за это, поскольку я не программист Rails.. Мне просто нужно разобраться с этим, чтобы я мог вернуться к продуктивной работе.

Я унаследовал RoR-сайт, и мне нужно иметь изображение, которое вращается случайным образом при загрузке страницы. Просто, не так ли?

Моим решением было сгенерировать случайное число от 0 до 2. Если число больше 1, отображается одно изображение, в противном случае отображается другое. Я поместил это в sidebar.erb файл :

 <div class="shadow">

<%- if rand(2) > 1 %>
        <img src="foo.png"/>
<%- else %>
        <img src="bar.png"/>
<%- end %>
                </div>
  

Я получаю следующую ошибку в журналах сайта:

 warning: else without rescue is useless
  

Вероятно, я делаю это совершенно неправильно. Честно говоря, мне просто нужно, чтобы это работало с минимальными усилиями. Любая помощь была бы высоко оценена.

Комментарии:

1. Вероятно, ошибка в другом месте вашего кода. Приведенный выше вид отлично работает в Rails 3.0.7, Ruby 1.8.7.

Ответ №1:

Сначала вам нужно будет вычислить случайное число в вашем контроллере и поместить его в переменную экземпляра, например :

 @image_random = rand(2)
  

Затем, по вашему мнению :

 <% if @image_random == 1 %>
        <%= image_tag "foo.png" %>
<% else %>
        <%= image_tag "bar.png" %>
<% end %>
  

Вы можете безопасно проиграть — после <% в Rails 3 🙂 Это было сделано автоматически.

Имейте в виду, что rand (2) вернет либо 0, либо 1. Таким образом, проверка на случайное значение > 1 всегда будет выдавать значение false.

Комментарии:

1. Также … rand (2) генерирует число от 0 до 1, а не 1 и 2. По крайней мере, в Ruby 1.9.2

2. @ardavis: именно о том, о чем была моя первая правка, вы, ребята, такие быстрые : P Теперь предупреждение, держу пари, что оно взято из предыдущего кода, возможно, если incredimike вставит, мы сможем лучше с этим помочь. Но я думаю, что то, что я пишу, является правильным способом сделать это.