Ruby on Rails: странная ошибка метода в моем контроллере? - PullRequest
2 голосов
/ 18 марта 2011

Вот что я получил в своих журналах:

Запущен POST "/video_votes.437?type=up" для 127.0.0.1 в пт 18 марта 01:11:14 -0700 2011 Обработка VideoVotesController # createas Parameters: {"authenticity_token" => "DLyDcc4MJxK7gk4URiyyjvsLLl9hjtDChAyQRGVawKg =", "type" => "up"} Завершено за 83ms

NoMethodError (вы могли ожидать, что у вас нет объекта nil, когда вы ожидали, что у вас нет nil-объекта, когда вы ожидали, что его нетожидал экземпляр 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

А вот мой код для кнопки в моемпосмотреть, что вызывает метод создания:

<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 Ответ

3 голосов
/ 18 марта 2011

Вы хэши params {"authenticity_token"=>"DLyDcc4MJxK7gk4URiyyjvsLLl9hjtDChAyQRGVawKg=", "type"=>"up"}

В этом хеше нет ключа с названием "video_vote", поэтому при попытке доступа к params[:video_vote][:video_id], потому что params[:video_vote] равен нулю. это выдаст эту ошибку.

Проверьте свои маршруты или, если вам нужно, «получить» больше значений с помощью кнопки, потому что ваш хэш params не знает о ключе «video_vote».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...