Подтвердить что ты не робот

Rails 3: отображение переменной с контроллера

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

В принципе, у меня есть 2 файла: articles_controller.rb и _article.html.erb

В моем файле контроллера у меня есть переменная @article_votes, которую я хочу отобразить на моем представлении. Я пробовал использовать <%= @article_votes %>, но он ничего не отображает.

Есть ли у кого-нибудь указания? Спасибо!

4b9b3361

Ответ 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", он сработал.