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

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

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

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

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

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

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

 
 <%= @article_votes.inspect %> 

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

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

希望这可以帮助。

<%= @article_votes%>的输出将取决于@article_votes是哪个类的对象以及您是否实际呈现该_article.html.erb模板

只需在index.html.erb文件中调用<%= render:partial =>‘article’%>或者以您尝试呈现此视图所使用的控制器操作命名的.html.erb文件。

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

确保@article_votes是除nil之外的类的实例

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

例如

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

@article_vote = ArticleVote.first

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

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

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

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

 <%= article_votes %> 

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

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

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

当我清楚地设置它时,我无法弄清楚为什么我的变量没有被设置。 一旦我将它移到“渲染动作::新”之上就可以了。