【问题标题】:Rails 3: Display variable from controller in viewRails 3:在视图中显示来自控制器的变量
【发布时间】:2011-07-25 06:11:12
【问题描述】:

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

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

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

有人有什么指导吗?谢谢!

【问题讨论】:

  • 您确定@article_votes 包含某些内容吗?您可以在控制器中尝试“puts article_votes: #{@article_votes}”并检查您的 logs/development.log 以查看是否有任何输出
  • 永远不要在 Rails 应用程序中使用 puts!使用 logger.debug 代替参见此处的第 2.3 节guides.rubyonrails.org/debugging_rails_applications.html 或在视图中使用普通 debig。也记录在该页面上

标签: ruby-on-rails variables view controller


【解决方案1】:

不确定您对 Rails 的了解程度。您在控制器中定义的任何实例变量都可以在视图中访问。

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

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

您视图中的某处应显示在您的页面中。

_article.html.erb 默认不显示。如果您的ArticlesController 中有show 方法,则会呈现名为show.html.erb 的视图。这是一个通用的方法,所以对于index方法,它应该被称为index.html.erb

希望这会有所帮助。

【讨论】:

  • 做到了!感谢您的帮助!
【解决方案2】:

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

只需在 index.html.erb 文件或任何 .html.erb 文件中调用 'article' %> 以尝试呈现此视图的控制器操作命名。

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

确保@article_votes 是非 nil 类的实例

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

例如

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

@article_vote = ArticleVote.first

如果您的部分中有 并假设您实际上正在渲染该部分

【讨论】:

    【解决方案3】:

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

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

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

    <%= article_votes %>
    

    【讨论】:

    • 调用 虽然很可能不会得到想要的结果,但它需要类似于 article_votes.some_attribute
    • 由于 @article_votes 是控制器的实例变量,因此无需将变量传入,尽管对于 partials 不依赖实例变量可以认为是一种好习惯(这鼓励在其他观点)。其次,@jamesw 所说的:如果你不知道会发生什么,我更喜欢写 article_votes.inspect:它会在所有情况下生成一个清晰的字符串。
    • 我应该更清楚。然后,article_votes 变量将在部分中可用。所以,是的,您可以调用与变量关联的任何属性。 As described here
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      当我明确设置变量时,我无法弄清楚为什么没有设置变量。一旦我将它移到“渲染操作::new”上方,它就起作用了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-19
        • 1970-01-01
        • 2018-08-18
        相关资源
        最近更新 更多