使用acts_as_list和has_many:通过rails

我有一个rails应用程序我正在尝试使用acts_as_list插件设置可排序列表。 数据库中的位置字段正在更新,但在呈现页面时,不会考虑订单。 我想,我正在寻求帮助。

这是我的模特……

class QuestionMembership < ActiveRecord::Base belongs_to :form belongs_to :question acts_as_list end class Form  :question_memberships end class Question  :question_memberships acts_as_list end 

以及给我列表的草率视图代码……

   <li class="question" id= > 
true) %>

拖放适用于重新排序。 位置值在DB中为QuestionMembership对象更新,页面实际上正确显示了重新排序。 问题是在页面重新加载时,它默认返回到它的感觉顺序。 我认为它默认为订单的问题ID而不是question_membership位置,但我不确定。

关于我如何通过QuestionMembership的位置字段在初始渲染上实际订购的任何想法?

最终版本:

 class QuestionMembership < ActiveRecord::Base belongs_to :form belongs_to :question acts_as_list :scope => :form end class Form < ActiveRecord::Base has_many :question_memberships, :order => "position" has_many :questions, :through => :question_memberships end class Question < ActiveRecord::Base has_many :question_memberships, :order => "position" has_many :forms, :through => :question_memberships acts_as_list :scope => :form end 

我发布问题后,就会找到答案。 我错过了我的模型上的:order和:scope属性。

我正在努力解决这个问题。 直到我找到这个例子,我只是在“问题”模型上使用acts_as_list。 它会起作用,但是当我试图创建新的问题时,Rails会感到困惑。

我试过这种方式,我可以创建新对象,但似乎我的应用程序对“位置”字段应该存在的模型感到困惑。

最后,我意识到,在我的情况下,仅使用连接模型作为开启位置字段的模型是完全合适的,因为这正是:scope关键字的用途! 它将“问题”的排序范围限定在每个“表格”中,每个表格可能不同 。 在此之后,我只是从“问题”模型中删除了acts_as_list,并基于抓取“QuestionMembership”实例(然后使用他们的子项显示数据)处理排序。

我知道我在这里并没有增加多少,但是我的灯光也亮了,也许这个评论会帮助别人。

使用Rails 2.3,您可以将默认范围设置为始终按位置排序:

 acts_as_list :scope =>  default_scope :order => :position 

请注意,范围的使用与acts_as_list的范围不同,后者决定列表的范围。