2011-07-25 50 views
22

我很新的轨道,我想知道如何可以从我的控制器显示一个变量到我的视图。Rails 3:从控制器的视图中显示变量

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

在我的控制文件中我有一个变量@article_votes,我想显示在我的看法。我试过使用<%= @article_votes %>,但它根本不显示任何东西。

有没有人有任何指导?谢谢!

+0

你确定@article_votes包含内容吗?您可以在控制器中尝试“放入article_votes:#{@ article_votes}”并检查日志/ development.log以查看是否有任何输出 –

+4

从不在Rails应用程序中使用放入!使用logger.debug,而不是在这里看到2.3节http://guides.rubyonrails.org/debugging_rails_applications.html或在视图中使用普通的debig。也记录在该页 – jamesc

回答

43

不知道你是怎么来的新轨道。您在控制器内定义的任何实例变量都可在视图内访问。

所以,如果@article_votes在控制器中定义,写

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

在你看来应该某处在页面中显示出来。

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

希望这会有所帮助。

+0

这样做!谢谢你的帮助! – Ben

1

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

2

的<%= @article_votes%>将取决于什么类@article_votes是一个对象的输出,你是否被实际渲染_article.html.erb模板

只需拨打<%= render:partial =>'article'%>在index.html.erb文件中,或者任何.html.erb文件都是用您试图呈现此视图的控制器操作命名的。

从控制器@article_votes通常未来将是一个阵列(约定)复数名表示对象的数组和单数名称表示基于表称为article_votes一个ActiveRecord类的特定对象,其中将包括所有的值在表中为特定记录举行。

确保@article_votes大于零

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

假设表article_votes有个名字叫它列,你必须在与“这是一个名称”的值,那么在一个控制器动作下面的代码,表1条article_vote记录将让你的“显示器这是一个名为”你的屏幕上

@article_vote = ArticleVote.first

如果你有<%= @ article_vote.name%>在您的部分,并假设你实际上是在渲染部分

2

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

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

现在在你的部分,你可以使用

<%= article_votes %> 
+0

调用<%= article_votes%>虽然很可能不会有所需的结果,它将需要像article_votes.some_attribute – jamesc

+1

由于“@ article_votes”是控制器的实例变量,没有必要以传递变量,虽然可以认为partials不依赖于实例变量(这会鼓励在其他视图中重用),这是很好的做法。其次,@jamesw说:如果你不知道期望什么,我更愿意写'article_votes.inspect':它会在所有情况下生成一个清晰的字符串。 – nathanvda

+0

我应该更清楚。然后'article_votes'变量将在部分内可用。所以,是的,你可以调用与变量相关的任何属性。 [如此处所述](http://rails-bestpractices.com/posts/27-replace-instance-variable-with-local-variable) – Trent

0

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

我有一个标准的“创建”块,如果模型没有保存,它会返回错误。在这种情况下,我设置了一个实例变量,以便重新渲染将滚动到错误所在的表单。

我不明白为什么我的变量没有被设置,当我清楚地设置它。只要我将它移动到“渲染动作::新”之上,它就起作用了。

相关问题