我有一个简单的 Rails 3 应用程序,其中一个目标有许多目标。在我看来,我允许用户对任何给定目标的目标重新排序,并且我正在使用acts_as_list gem 来实现其中的一些功能。
目标模型:
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
),gem 就会重置位置列,但它只是保留当前位置。
对我来说,这是不可取的,因为在新目标的背景下,这个位置不再有意义。我宁愿重置位置,并将目标移动到与之关联的新目标的底部。所以我写了这个方法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
不幸的是,当我尝试保存时,这会导致错误。关于如何解决这个问题的任何想法?