Rails 3: отображение переменной из контроллера в поле зрения - PullRequest
24 голосов
/ 25 июля 2011

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

По сути, у меня есть 2 файла: articles_controller.rb и _article.html.erb

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

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

Ответы [ 5 ]

46 голосов
/ 25 июля 2011

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

Итак, если в контроллере определено @article_votes, запись

<code><pre>
  <%= @article_votes.inspect %>

где-то вваш вид должен отображаться на вашей странице.

Но _article.html.erb не отображается по умолчанию.Если у вас есть show метод в вашем ArticlesController, представление с именем show.html.erb отображается.Это общий подход, поэтому для метода index он должен называться index.html.erb.

Надеюсь, это поможет.

2 голосов
/ 25 июля 2011

Вывод <% = @article_votes%> будет зависеть от того, к какому классу относится объект @article_votes, и от того, действительно ли вы визуализируете этот шаблон _article.html.erb

Просто вызовите <%= render: частичный => 'article'%> в файле index.html.erb или в любом другом файле .html.erb, названном в честь действия контроллера, которое вы используете для отрисовки этого представления.

Обычноиз контроллера @article_votes будет массивом (по соглашению) множественные имена обозначают массив объектов, а единственное имя обозначает конкретный объект класса ActiveRecord на основе таблицы под названием article_votes, которая будет содержать все значения, хранящиеся в таблице дляконкретная запись.

Убедитесь, что @article_votes является экземпляром класса, отличного от nil

Если это просто строка, то (@article_votes = "A string") вы увидите, чтопо вашему мнению.Если это результат вызова ActiveRecord для поиска всех объектов из модели ArticleVotes, то это будет массив, который будет пустым, если в таблице ничего нет.Вам нужно будет получить конкретный объект из этого массива, а затем вам нужно будет выбрать, какой из доступных методов для этого объекта вы хотите отобразить

например

Предполагая, что таблица article_votes имеет столбецВы называете имя на нем, и у вас есть 1 запись article_vote в этой таблице со значением «Это имя», тогда следующий код в действии контроллера даст вам отображение «Это имя» на вашем экране

@ article_vote = ArticleVote.first

Если у вас было <% = @ article_vote.name%> в вашем частичном и вы предполагаете, что вы действительно воспроизводите этот частичный

2 голосов
/ 25 июля 2011

Если вы вызываете партиал, вам нужно передать ему переменную @article_votes.

<@= render 'article', :article_votes => @article_votes %>

Теперь внутри партиала вы можете использовать

<%= article_votes %>
1 голос
/ 25 июля 2011

_article.html.erb является частичным представлением.Вы уверены, что в браузере отображаются правильные действия?

0 голосов
/ 16 ноября 2016

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

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

Я не мог понять, почему моя переменная не была установлена, когда я ее явно устанавливал. Как только я переместил его выше «render action:: new», оно заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...