我正在使用Ryan Bates nested_form gem。我希望能够控制列出嵌套字段的顺序。我有一个可以工作的default_scope,但我需要根据场景对此进行更多控制。
理想情况类似
# In controller action
@nesties = Nesty.order("name desc")
# In view
# If @nesties defined the following line would respect the @nesties ordering
f.fields_for :nesties do |nestie-form|
现在它会尊重default_scope的排序,但我找不到任何其他方法来控制排序。
答案 0 :(得分:13)
请注意fields_for
接受第二个参数,这是指定要使用的对象/关联时可以指定命名范围的位置。以下对我有用。 Rails 3.x
#In Model Nestie
scope :ordered_nesties, order("name DESC")
belongs_to :parent
#In Model Parent
has_many :nesties
#In View
f.fields_for :nesties, @parent.nesties.ordered_nesties do |nestie-form|
希望这有帮助。
答案 1 :(得分:7)
在具有nesties关联的模型中:
has_many :nesties, :order => "name DESC"
虽然这对您的应用来说可能过于全球化。
但最根本的是,fields_for并没有接受它在父模式模型关联时所采用的@nesties。
编辑:不确定这适用于nested_form gem,但此解决方案不会影响nesties关联的正常排序:
named_scope :ordered_nesties, :order => "name DESC"
然后
f.fields_for :ordered_nesties do |nestie-form|
答案 2 :(得分:1)
仅供参考,这件事对我有用而没有制作范围
f.fields_for :nesties, @parent.nesties.ordered("name DESC") do |nestie-form|
答案 3 :(得分:1)
我能够使用以下方法获取我的嵌套表单对象。希望它可以帮助别人...
<%= form.nested_fields_for :evaluations,
form.object.evaluations.target.sort_by! { |e| e.skill.sort } do |f| %>
答案 4 :(得分:0)
nested_form gem似乎有一种奇怪的行为(我认为这是一个错误)。 当给出一个要渲染的集合时 - 它按&#34; id&#34;进行排序。在渲染之前。 它对大多数人来说可能是透明的,但在某些情况下会让人感到不安。
Shantanu上面给出的解决方案通过直接向fields_for提供集合来渲染并有效地绕过nested_forms迭代器来解决这个问题。
我浪费了2个多小时试图解决这个问题。谢谢Shantanu!