【问题标题】:Ruby on Rails: undefined method in my view partialRuby on Rails:我认为部分未定义的方法
【发布时间】:2011-03-18 04:04:57
【问题描述】:

我收到此错误:undefined method 'vote_sum' for nil:NilClass

在我看来这行部分:<p id='votes'><%= pluralize @video.vote_sum, 'Votes' %></p>

我不明白为什么,因为vote_sum 是视频表中的一列。以下是我的Video 模型中的一些相关逻辑:

def vote_sum
  read_attribute(:vote_sum) || video_votes.sum(:value)
end

还有我的VideoVote 模特:

after_create :update_vote_sum

private

  def update_vote_sum
    video.update_attributes(:vote_sum => video.vote_sum + value)
  end

知道为什么@video.vote_sum 在我看来是未定义的部分吗?

更新:

这是我的 video_votes 控制器的 create 方法中的相关代码:

  @video = Video.find(params[:video_vote][:video_id])
  @vote = @video.video_votes.new 

【问题讨论】:

  • 您确定在您的控制器中定义了@video?可以添加控制器代码和调用partial的视图吗?
  • 我从 video_votes 控制器中发布了相关代码。我不认为呈现部分的视图是相关的,但呈现部分的视图是位于视图目录内的视频目录中的另一个部分。

标签: ruby-on-rails ruby ruby-on-rails-3 undefined


【解决方案1】:

它说 vote_sum 是一个未定义的方法,因为它不是在视频上调用它,它实际上是在 Nil 上调用它。发生这种情况是因为 @video 为 nil,而不是 Video 的一个实例。

问题是您的控制器中没有正确设置@video。

我想你想要

@video = Video.find(params[:video_id]) 

假设 params[:video_id] 存在。

编辑

似乎您有一个要显示部分视频的列表,并且 rails 提供了一种显示部分集合的机制。

<%= render @videos %> # assuming you have a partial called _video.html.erb

要访问视频,您可以使用 _video.html.erb 中的 video 变量访问它

请参阅here 了解更多信息。

【讨论】:

  • 目前在我的 video_votes 控制器中:@video = Video.find(params[:video_vote][:video_id]) @vote = @video.video_votes.new 这不正确?
  • 是的,那条线在某种程度上是错误的,因为它将@video 设置为 nil
  • 哦,也许是因为这个部分正在我的索引视图中呈现,这就是我在视频控制器的索引方法中所拥有的:@videos = Video.all我该如何解决这个问题?
  • 是的,我看到了你的新解决方案。我实际上创建了一个新的部分并在 _video.html.erb 部分中呈现了部分。我
  • 是的,那行得通。我通过在部分中渲染部分来使其变得不必要地困难......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2016-12-15
  • 2019-10-31
  • 2018-07-06
  • 2012-09-25
相关资源
最近更新 更多