我对rails非常陌生,我想知道如何将控制器中的变量显示到我的视图中。
基本上,我有2个文件:articles_controller.rb
和_article.html.erb
在我的控制器文件中,我有一个变量@article_votes
,我希望在我的视图中显示。我尝试过使用<%= @article_votes %>
但它根本没有显示任何内容。
有人会有任何指导吗?谢谢!
答案 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;它奏效了。