我有一个简单的Rails应用程序3其中目标有很多目标。 在我的意见,我允许用户对重新排序目标对于任何给定的目标,我现在用的是acts_as_list宝石来实现一些此功能。
目标模式:
class Goal < ActiveRecord::Base
attr_accessible :name, :description
has_many :objectives, :order => :position, :dependent => :destroy
end
目标模式:
class Objective < ActiveRecord::Base
attr_accessible :name, :description, :position
belongs_to :goal
acts_as_list :scope => :goal
end
我也想允许用户改变特定的目标关联的目标。 我会假设acts_as_list
宝石将重置每当一个目标的目标是改变了位置的列(因为我定义的scope => :goal
),而是它只是保留当前的位置。
对我来说,这是不可取的,因为该位置不再是一个新的目标的背景下才有意义。 我宁愿该位置被复位,目标移动到其关联的新的目标的底部。 所以我写了这个方法上发生before_save
的目标模式:
before_update :reset_position
def reset_position
if self.goal_id_changed?
self.move_to_bottom #acts_as_list method
end
end
不幸的是,这会导致一个stack level too deep
,当我试图保存错误。 任何想法我怎么能解决这个问题?