Rails 3:在视图中显示控制器中的变量
我对rails非常陌生,我想知道如何将控制器中的变量显示到我的视图中。
基本上,我有2个文件: articles_controller.rb
和_article.html.erb
在我的控制器文件中,我有一个变量@article_votes
,我希望在我的视图中显示。 我尝试过使用但它根本没有显示任何内容。
有人会有任何指导吗? 谢谢!
不确定你对rails有多新。 您在控制器中定义的任何实例变量都可在视图内访问。
因此,如果在控制器中定义了@article_votes
,则写入
<%= @article_votes.inspect %>视图中的某个位置应显示在您的页面中。
但默认情况下不显示
_article.html.erb
。 如果在ArticlesController
有show
方法,则会呈现名为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之前设置变量值。
我有一个标准的“创建”块,如果没有保存模型,它将返回错误。 在这种情况下,我设置了一个实例变量,因此重新渲染将滚动到错误所在的表单。
当我清楚地设置它时,我无法弄清楚为什么我的变量没有被设置。 一旦我将它移到“渲染动作::新”之上就可以了。