Ruby on Rails:在我的视图中部分未定义的方法

时间:2011-03-18 04:04:58

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

我收到此错误: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 

1 个答案:

答案 0 :(得分: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