使用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
的范围不同,后者决定列表的范围。
- Rails和Ajax:通过选择的filter显示产品
- 如何将params传递给Rails控制器方法然后使用JQuery / AJAX返回值?
- 无法通过Chrome扩展程序跨站点ajax api调用?
- Ruby on Rails:将javascript数据发送到ruby控制器
- Rails form_for collection_select忽略select_tag接受的远程ajax调用
- Rails:用户使用以下命令销毁不相关的对象后退出:remote => true
- Ajax请求导致“param丢失或值为空”错误
- Rails 4:如何通过AJAX更新基于另一个collection_select的collection_select?
- Rails / AJAX部分渲染