Обработка неопределенной переменной
Я отрисовываю частичное в одном представлении:
<%= 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.
Кроме того, я обнаружил, что в долгосрочной перспективе это обеспечивает гораздо большую гибкость, и мне приходится меньше думать о том, какие переменные частично нужны в данный момент и определены ли они.