Rails 3: отображение переменной с контроллера
Я новичок в рельсах, и мне было интересно, как я могу отобразить переменную с моего контроллера в моем представлении.
В принципе, у меня есть 2 файла: articles_controller.rb
и _article.html.erb
В моем файле контроллера у меня есть переменная @article_votes
, которую я хочу отобразить на моем представлении. Я пробовал использовать <%= @article_votes %>
, но он ничего не отображает.
Есть ли у кого-нибудь указания? Спасибо!
Ответы
Ответ 1
Не знаете, насколько вы новичок в рельсах. Любая переменная экземпляра, которую вы определяете внутри вашего контроллера, доступна внутри представлений.
Итак, если @article_votes
определяется в контроллере, пишу
<pre>
<%= @article_votes.inspect %>
</pre>
где-то в вашем представлении должно появиться на вашей странице.
Но _article.html.erb
по умолчанию не отображается. Если у вас есть show
метод в ArticlesController
, отображается представление с именем show.html.erb
. Это общий подход, поэтому для метода index
его следует называть index.html.erb
.
Надеюсь, что это поможет.
Ответ 2
Результат <% = @article_votes% > будет зависеть от того, какой класс является объектом @article_votes, и независимо от того, действительно ли вы выполняете этот шаблон _article.html.erb
Просто вызовите <% = render: partial = > 'article'% > в файле index.html.erb или какой-нибудь файл .html.erb указан после действия контроллера, которое вы используете, чтобы попытаться отобразить это представление.
Обычно, исходящий из контроллера @article_votes будет представлять собой массив (по соглашению), множественные имена обозначают массив объектов, а сингулярное имя обозначает конкретный объект класса ActiveRecord на основе таблицы, называемой article_votes, которая будет содержать все сохраненные значения в таблице для конкретной записи.
Убедитесь, что @article_votes является экземпляром класса, отличного от nil
Если это просто строка, то (@article_votes = "A string" ), то вы увидите это в своем представлении.
Если это результат вызова ActiveRecord для поиска всех объектов из модели ArticleVotes, то это будет массив, который будет пустым, если в таблице ничего нет. Вам нужно будет получить конкретный объект из этого массива, и тогда вам нужно будет выбрать, какой из доступных методов на этом объекте вы хотите отображать
например.
Предполагая, что в статье article_votes есть столбец с именем name, и у вас есть 1 запись article_vote в этой таблице со значением "Это имя", тогда следующий код в действии контроллера получит вам сообщение "This это имя" на вашем экране
@article_vote = ArticleVote.first
Если у вас есть <% = @article_vote.name% > в вашей частичной части и предполагается, что вы фактически выполняете частичный
Ответ 3
Если вы вызываете частичное, вам нужно передать ему переменную @article_votes.
<@= render 'article', :article_votes => @article_votes %>
Теперь в рамках частичного использования вы можете использовать
<%= article_votes %>
Ответ 4
_article.html.erb
является частичным представлением. Вы уверены, что в браузере вы показываете правильное действие?
Ответ 5
Еще одна важная вещь, с которой я столкнулся, заключается в том, что ваши значения переменных должны быть установлены до вашего вызова для рендеринга.
У меня был стандартный блок "create", где, если модель не была сохранена, она возвращала бы ошибки. В этом случае я устанавливал переменную экземпляра, чтобы повторная рендеринга прокручивалась до формы, где были ошибки.
Я не мог понять, почему моя переменная не была установлена, когда я четко ее настраивал. Как только я переместил его над "render action:: new", он сработал.