Rails nested_form排序

时间:2012-05-11 21:48:47

标签: ruby-on-rails nested-forms

我正在使用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的排序,但我找不到任何其他方法来控制排序。

5 个答案:

答案 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!