我的设置: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个字符时才创建子角色。我的问题是如何从check_count方法中将错误消息返回给@user对象,当前错误是指字符对象,而不是@user。在此先感谢您的帮助。
答案 0 :(得分:4)
经过一番挖掘后,我找到了解决方案
<强> user.rb 强>
accepts_nested_attributes_for :characters, :before_add :set_parent
has_many :characters
def set_parent(character)
character.user ||= self
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
希望这有助于其他人。