Rails 3:在视图中显示来自控制器的变量

时间:2011-07-25 06:11:12

标签: ruby-on-rails variables view controller

我对rails非常陌生,我想知道如何将控制器中的变量显示到我的视图中。

基本上,我有2个文件:articles_controller.rb_article.html.erb

在我的控制器文件中,我有一个变量@article_votes,我希望在我的视图中显示。我尝试过使用<%= @article_votes %>但它根本没有显示任何内容。

有人会有任何指导吗?谢谢!

5 个答案:

答案 0 :(得分:46)

不确定你对铁杆有多新。您在控制器中定义的任何实例变量都可以在视图中访问。

因此,如果在控制器中定义@article_votes,则编写

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

您视图中的某个位置应显示在您的页面中。

但默认情况下不会显示_article.html.erb。如果show中有ArticlesController方法,则会呈现名为show.html.erb的视图。这是一种通用方法,因此对于index方法,应将其称为index.html.erb

希望这有帮助。

答案 1 :(得分:2)

&lt;%= @article_votes%&gt;的输出将取决于@article_votes是什么类,以及您是否实际渲染_article.html.erb模板

只需致电&lt;%= render:partial =&gt; 'article'%&gt;在index.html.erb文件或任何.html.erb文件以您用来尝试呈现此视图的控制器操作命名。

通常来自控制器@article_votes将是一个数组(按照惯例),多个名称表示对象数组,单数名称表示ActiveRecord类的特定对象,基于名为article_votes的表,其中包含所有值在表格中的特定记录。

确保@article_votes是除nil

以外的类的实例

如果它只是一个字符串(@article_votes =“A string”),那么您将在视图中看到它。 如果它是调用ActiveRecord从ArticleVotes模型中查找所有对象的结果,那么它将是一个数组,如果表中没有任何内容将为空。您需要从该数组中获取特定对象,然后您需要选择要在该对象上显示哪些可用方法

e.g。

假设表article_votes上有一个名为name的列,并且该表中有1个article_vote记录,其值为'This is a name',那么控制器操作中的以下代码将显示“This是“在屏幕上

的名称

@article_vote = ArticleVote.first

如果你有&lt;%= @ article_vote.name%&gt;在你的部分,并假设你实际上正在渲染那个部分

答案 2 :(得分:2)

如果你正在调用partial,你需要将@article_votes变量传递给它。

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

现在你可以使用

<%= article_votes %>

答案 3 :(得分:1)

_article.html.erb是局部视图。您确定在浏览器中显示正确的操作吗?

答案 4 :(得分:0)

我遇到的另一件重要事情是,必须在调用渲染之前设置变量值。

我有一个标准&#34;创建&#34;阻止如果模型没有保存,它将返回错误。在这种情况下,我设置了一个实例变量,因此重新渲染将滚动到错误所在的表单。

我无法弄清楚为什么我的变量在我明确设置时没有被设置。一旦我将它移到&#34;渲染动作上面:new&#34;它奏效了。