Обработка неопределенной переменной

Я отрисовываю частичное в одном представлении:

<%= render 'video', :video => @video, :video_id => 'video_show_id' %>

и иметь этот код в частичном:

<% if video_id %>
  <%= link_to "video", video.video_url, :class => "oembed", :id => video_id %>
<% else %>
  <%= link_to "video", video.video_url, :class => "oembed" %>
<% end %>

Проблема в том, что эта часть отображается в нескольких местах моего приложения, а в других представлениях я не хочу передавать :video_id в частичное. Поэтому мое приложение выдает ошибку, video_id не определено Я мог пройти :video_id => "" в частичное в других представлениях, но поскольку частичное отображается во многих местах, это своего рода боль. Есть ли более простой способ справиться с этим?

3 ответа

Решение

Пытаться defined? и не то, чтобы это действительно имеет значение, но на самом деле это оператор.

<% if defined? video_id %>

Я думаю, что лучший способ справиться с этим - создать помощника, который затем будет управлять значениями переменных, которые должны быть переданы в частичное. Что-то вроде:

module VideoHelper 

  def show_video(video, options = {})
    options[:id] ||= ""
    render 'video', :video => video, :video_id => options[:id]
  end  

end

Теперь вместо того, чтобы иметь длинную строку рендера в вашем представлении, вы можете сократить ее до вызова show_video.

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

Изменить чек на <% if defined? video_id %>

Другие вопросы по тегам