Welcome #index中的NoMethodError

时间:2014-01-17 19:17:19

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

我是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>

我认为这会在视频控制器中起作用,但它不能帮助你。

3 个答案:

答案 0 :(得分:1)

我会让我的控制器变瘦。假设我想要返回突出显示的第一条记录,我会在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方法,则视图中的代码应该可以正常工作。

答案 1 :(得分:1)

如果你想获得第一张唱片,试试这个

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

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

答案 2 :(得分:0)

您无法在url上调用@highlighted_video方法
在此变量中,您有video

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

on index.html.erb

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