Обработка acceptpts_nested_attributes_ для детей ошибок - PullRequest
1 голос
/ 09 апреля 2011

Моя настройка: Rails 2.3.10, Ruby 1.8.7

users_controller.rb

 def character
  @user = User.find(params[:id])

  respond_to do |format|
  if @user.update_attributes(params[:user])
   format.json { render :json => @user }
  else
   format.json { render :json=> @user.errors.full_messages, :status => :unprocessable_entity }
  end
 end
end

user.rb

 accepts_nested_attributes_for :characters
 has_many :characters
end

character.rb

 belongs_to :user
 before_create :check_count

 def check_count
  if Characters.find(:all, :conditions => ["user_id = ?", self.user_id).count == 3
   errors.add_to_base I18n.t :exceeds 
   false
  end
 end
end

В методе символов пользователя (это пользовательский метод) я хочу создать дочерний символ, только если для пользователя еще нет 3 символов. Мой вопрос заключается в том, как вернуть сообщение об ошибке в объект @user из метода check_count, в настоящее время ошибки относятся к символьному объекту, а не к @user. Заранее благодарим за помощь.

1 Ответ

4 голосов
/ 09 апреля 2011

После недолгих поисков я нашел решение

user.rb

accepts_nested_attributes_for :characters, :before_add :set_parent
has_many :characters

def set_parent(character)
 character.user ||= self
end

end

character.rb

 belongs_to :user
 before_create :check_count

 def check_count
  if Characters.find(:all, :conditions => ["user_id = ?", self.user_id).count == 3
   self.user.errors.add_to_base I18n.t :exceeds 
   false
  end
 end
end

Надеюсь, это поможет кому-то еще.

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