ActiveRecord неправильные столбцы - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь создать новый объект, связанный с двумя другими моделями, но мне трудно заставить его работать.

Модель:

голос.rb

class Vote < ActiveRecord::Base

  belongs_to :solution
  belongs_to :user

end

(Решение и модель пользователя имеют has_many :votes на своей стороне.

В моем контроллере решений я делаю это:

  def process_vote
    solution = Solution.find(params[:id])
    vote = Vote.where(:user => current_user, :solution => solution)
    if(vote.count == 0)
      newvote = Vote.new
      newvote.user = current_user
      newvote.positive = true
      newvote.solution = solution
      newvote.save
    end
    respond_to do |format|
      format.js {
        render :nothing => true
      }
    end
  end

Запрос, сгенерированный ActiveRecord, ищет неправильные столбцы, это то, что консоль показывает, когда я вызываю метод process_vote:

   (0.6ms)  SELECT COUNT(*) FROM `votes` WHERE `votes`.`user` = 2 AND `votes`.`solution` = 5

Mysql2::Error: Unknown column 'votes.user' in 'where clause': SELECT COUNT(*) FROM `votes`  WHERE `votes`.`user` = 2 AND `votes`.`solution` = 5
Completed 500 Internal Server Error in 17ms

ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'votes.user' in 'where clause': SELECT COUNT(*) FROM `votes`  WHERE `votes`.`user` = 2 AND `votes`.`solution` = 5):
  app/controllers/solutions_controller.rb:74:in `process_vote'

Есть идеи, что может быть не так? Мне кажется, что отношениянастроены нормально. Фактические имена столбцов user_id и solution_id.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2011
vote = Vote.where(:user_id => current_user.id, :solution_id => solution.id)
0 голосов
/ 02 ноября 2011
  1. Похоже, вы не должны получать полный экземпляр решения из БД. ID решения из params должно быть достаточно.
  2. Не используйте имена ассоциаций в where. Используйте идентификаторы

Итак, ваше действие должно выглядеть так:

def process_vote
  current_user.votes << Vote.new(:positive => true, solution_id => params[:id]) if current_user.votes.where(:solution_id => params[:id]).count == 0
  respond_to do |format|
    format.js {
      render :nothing => true
    }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...