Rails 3 - обратный звонок - PullRequest
       5

Rails 3 - обратный звонок

0 голосов
/ 10 апреля 2011

User является вложенным атрибутом Announcement. Когда создается новый announcement, он создает новый user, если его электронная почта не найдена. В противном случае он должен просто отправить announcement в существующую запись user.

Я не уверен, какой обратный вызов использовать before_create или before_save. Следующий код по-прежнему не позволяет размещать новый announcement в существующей записи user. Полный новичок, пожалуйста, помогите.

class Announcement < ActiveRecord::Base

  attr_accessible :content, :users_attributes 

  has_many :users, :through => :awards

  accepts_nested_attributes_for :users, :reject_if => lambda { |a| a[:email].blank? }, :allow_destroy => true

  before_save :find_user

  private
  def find_user(user)
     If User.find(params[:email]).nil?
       @user = User.new
       @user.save
     else
     @user = User.find(params[:email])
  end
end

1 Ответ

0 голосов
/ 10 апреля 2011

Вам не нужно использовать никаких обратных вызовов вообще.Rails автоматически создает и удаляет вложенные атрибуты, что делает макрос accepts_nested_attributes_for таким замечательным.Вам не нужно вручную сохранять, создавать или удалять, кроме как в вашем контроллере, когда вы вызываете new и update_attributes.У вас могут быть проблемы, потому что ваша ассоциация наград должна быть определена до вашей ассоциации пользователей.В вашем примере кода я не вижу определения для ассоциации наград, даже если ваша ассоциация пользователей основана на наградах.В противном случае я бы проверил ваш контроллер и посмотреть код.Распространенная проблема, которую я имею, это передача неверных параметров из представления (убедитесь, что вы используете помощник fields_for в представлении).

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