Как передать переменные в частичные представления

Вот как можно передавать переменные в ваших частичных представлениях Ruby on Rails.

Во-первых, нам нужно визуализировать наше частичное представление внутри существующего представления ERB. Это будет выглядеть примерно так:

<%= render partial: "footer" %> 
# Or the shorthand version which can omit the "partial" key
<%= render "footer" %>

Далее нам нужно передать переменные в партиал, добавив хэш к этому вызову рендеринга.

<%= render partial: "footer" locals: {darkmode: false}%> 
# The shorthand version may also omit the "locals" key 
<%= render "footer", darkmode: false %>

Использование переменных в частичных представлениях

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

# In our footer partial 
<div>
  <%= "Darkmode is enabled" if darkmode %>
<div>

Советы и рекомендации по предотвращению ошибок

Приведенная выше реализация короткая и удобная, но очень подвержена ошибкам.

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

undefined local variable or method `darkmode' for #<#<Class:0x00007fc2979f6a58>:0x00007fc2979feb68>

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

Это должно выглядеть примерно так:

# In our footer partial
<div>
  <%= "Darkmode is enabled" if defined?(darkmode) && darkmode %>
<div>

Это гарантирует вызов darkmode только в том случае, если он определен. В противном случае мы будем рассматривать это как ложное условие.

Я надеюсь, что это было полезно, это определенно сбило меня с толку сегодня! ✌️

Первоначально опубликовано на https://testsuite.io.