【问题标题】:NoMethodError in Welcome#indexWelcome#index 中的 NoMethodError
【发布时间】:2014-02-07 06:21:49
【问题描述】:

我是 Rails 新手,我有一个带有视频模型、控制器和视图的应用。

我正在弄清楚如何查询和显示我想要的视频,到目前为止,我使用视频控制器时效果很好。

我有一个主页,我想在其中显示本周最重要的视频,所以我制作了一个带有索引操作的欢迎控制器,如教程所述。

在我拥有的欢迎控制器内部:

    class WelcomeController < ApplicationController

      def index
        @highlighted_video = Video.where("highlight = true")
      end

    end

highlight 是一个布尔属性。以及索引视图:

    <iframe width="100%" height="315" src="<%= @highlighted_video.url %>" frameborder="0" allowfullscreen></iframe>

但我收到以下错误(url 是我数据库中的另一个视频属性):

     undefined method `url' for #<ActiveRecord::Relation::ActiveRecord_Relation_Video:0x2507760>

我认为这可以像在视频控制器中一样工作,但它没有帮助。

【问题讨论】:

  • 您是否要获取第一条高亮值为 true 的记录?

标签: ruby-on-rails ruby methods controller undefined


【解决方案1】:

如果你想获得第一条记录,试试这个

@highlighted_video = Video.where("highlight = true").first

访问@highlighted_video实例变量的属性时要小心,如果没有记录匹配你的查询,它会返回nil值,你会得到错误未定义的方法url for nil class。

【讨论】:

    【解决方案2】:

    我会让我的控制器保持苗条。假设我想返回突出显示的第一条记录,我将在 Video 模型中添加一个 scope

    class Video < ActiveRecord::Base
      # ...
      scope :highlighted, -> { where(highlight: true).first }
      # ...
    end
    

    这将返回突出显示的第一个记录。然后在控制器中我会这样做:

    class WelcomeController < ApplicationController
    
      def index
        @highlighted_video = Video.highlighted
      end
    
    end
    

    假设您在模型中定义了#url 方法,那么您视图中的代码应该可以正常工作。

    【讨论】:

    • @user3099920 很高兴听到!如果它解决了您的问题,您不妨接受答案:)
    【解决方案3】:

    你不能在@highlighted_video 上调用url 方法
    在这个变量中,你有 video 的数组

      def index
        @highlighted_video = Video.where("highlight = true")
      end
    

    关于 index.html.erb

      <% @highlighted_video.each do |video| %>
         <iframe width="100%" height="315" src="<%= video.url %>" frameborder="0" allowfullscreen></iframe>
      <% end %>
    

    【讨论】:

    • 我只是在寻找一个视频,但我现在知道 WHERE 返回一个数组。如果我使用 FIND 方法会怎样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2012-03-02
    • 2015-01-24
    相关资源
    最近更新 更多