Renderuję częściowy w jednym widoku:
<%= render "video", :video => @video, :video_id => "video_show_id" %>
i umieść ten kod w częściowym:
<% if video_id %>
<%= link_to "video", video.video_url, :class => "oembed", :id => video_id %>
<% else %>
<%= link_to "video", video.video_url, :class => "oembed" %>
<% end %>
Problem polega na tym, że ta częściowa jest renderowana w wielu miejscach w mojej aplikacji, aw tych innych widokach nie chcę przejść :video_id
w częściowe. Dlatego moja aplikacja zgłasza błąd, który video_id
jest niezdefiniowany. Mógłbym przejść :video_id => ""
w częściowy w innych poglądach, ale ponieważ częściowe jest renderowane w wielu miejscach, jest to rodzaj bólu. Czy istnieje prostszy sposób, aby sobie z tym poradzić?
Odpowiedzi:
15 dla odpowiedzi № 1Próbować defined?
i nie to, że to naprawdę ma znaczenie, ale tak naprawdę to operator.
<% if defined? video_id %>
3 dla odpowiedzi № 2
Myślę, że lepszym sposobem na poradzenie sobie z tym jest stworzenie pomocnika, który następnie zarządza wartościami zmiennych, które należy podać do częściowego. Coś jak:
module VideoHelper
def show_video(video, options = {})
options[:id] ||= ""
render "video", :video => video, :video_id => options[:id]
end
end
Teraz zamiast konieczności wyświetlania długiej częściowej linii w widoku, można ją skrócić do wywołania show_video.
Odkryłem również, że w dłuższej perspektywie pozwala to na większą elastyczność i muszę mniej myśleć o tym, jakie zmienne częściowe potrzeby w tym momencie i czy są zdefiniowane.
1 dla odpowiedzi nr 3
Zmień czek na <% if defined? video_id %>