Ruby on Rails:我的控制器中有一个奇怪的无方法错误?

时间:2011-03-18 05:16:29

标签: html ruby-on-rails ruby ajax ruby-on-rails-3

以下是我在日志中的内容:

于2011年1月18日星期五01:11:14 -0700开始发布“/video_votes.437?type=up”for 127.0.0.1   由VideoVotesController处理#create as   参数:{“authenticity_token”=>“DLyDcc4MJxK7gk4URiyyjvsLLl9hjtDChAyQRGVawKg =”,“type”=>“up”} 完成时间为83毫秒

NoMethodError(当你没想到它时,你有一个零对象! 您可能期望ActiveRecord :: Base的实例。 在评估nil。[]时发生错误:   app / controllers / video_votes_controller.rb:3:在'create'

单击调用create方法的按钮时出现此错误。

以下是我的create方法中的代码(注意第三行是@video = Video.find(params[:video_vote][:video_id])行):

def create       
  @video = Video.find(params[:video_vote][:video_id])
  @vote = @video.video_votes.new
  if params[:type] = "up"
    @vote.value = 1
  else
    @vote.value = -1
  end

  if @vote.save
    respond_to do |format|
      format.html { redirect_to @video }
      format.js
    end
  else
    respond_to do |format|
      format.html { redirect_to @video }
      format.js {render 'fail_create.js.erb'}
    end
  end

这是我视图中按钮的代码,它调用create方法:

<div id='voting_div'>
  <%= button_to "+1", video_votes_path(video, :type=> "up"), :remote => true %>
  <div id='vote_display'>
    <p id='votes'><%= pluralize video.vote_sum, 'Votes' %></p>
  </div>
  <%= button_to "-1", video_votes_path(video, :type=> "down"), :remote => true %>
</div>

这里发生了什么?如何解决此错误?

1 个答案:

答案 0 :(得分:3)

你的参数哈希是 {"authenticity_token"=>"DLyDcc4MJxK7gk4URiyyjvsLLl9hjtDChAyQRGVawKg=", "type"=>"up"}

在此哈希中没有名为“video_vote”的密钥,因此当您尝试访问params[:video_vote][:video_id]时,因为 params[:video_vote]为零。它会抛出这个错误。

检查您的路线或是否需要使用按钮“获取”更多值,因为 params 哈希不知道“video_vote”键。