Предательское поведение ActiveRecord? - PullRequest
0 голосов
/ 26 октября 2009

У меня есть сообщение класс с голосом методом, который создает Голосовать экземпляр

Это не работает

def vote(options)
   vote = self.votes.create(options)
   return vote if vote.valid?
   nil
end 

Это работает

def vote(options)
   options[:post] = self
   vote = self.votes.create(options)
   return vote if vote.valid?
   nil
end 

Разве .create не должен автоматически добавлять: post ассоциацию?

ПОЯСНЕНИЯ

Класс Post

класс Голосовать true принадлежат: пост конец

Ответы [ 2 ]

0 голосов
/ 27 октября 2009

Было бы проще отладить, если вы записали его как self.votes.create!(options), потому что тогда он выдаст исключение с сообщением об ошибке. Вы можете убрать это, как только решите проблему, но вы должны подумать о том, что должен возвращать ваш метод, если он не работает.

Имеет ли смысл Post#vote возвращать nil? Почему голосование провалено? Как ваш код обрабатывает значение nil, возвращаемое Post#vote?

Может быть, вы просто должны переписать это как:

def vote(options)
  self.votes.create!(options)
end
0 голосов
/ 27 октября 2009

У вас есть

has_many :votes

заявлено в вашей почтовой модели?

В какой момент вы вызываете метод голосования в жизненном цикле объекта? Это часть метода обратного вызова?

...