6

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

4

5 回答 5

16

请注意,它fields_for接受第二个参数,这就是在指定要使用的对象/关联时可以指定命名范围的地方。以下对我有用。导轨 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|

希望这可以帮助。

于 2012-12-16T00:24:42.990 回答
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|
于 2012-05-11T23:04:44.963 回答
1

仅供参考,这件事对我有用,但没有制作范围

f.fields_for :nesties, @parent.nesties.ordered("name DESC") do |nestie-form|
于 2014-04-30T18:12:25.360 回答
1

我能够使用以下方法对我的嵌套表单对象进行排序。希望它可以帮助别人......

<%= form.nested_fields_for :evaluations, 
      form.object.evaluations.target.sort_by! { |e| e.skill.sort } do |f| %>
于 2016-04-05T23:03:07.640 回答
0

nested_form gem 似乎有一个奇怪的行为(在我看来这是一个错误)。当给定一个要渲染的集合时 - 它在渲染之前按“id”对其进行排序。它对大多数人来说可能是透明的,但在某些情况下却很不愉快。

Shantanu 上面给出的解决方案通过直接将集合提供给 fields_for 进行渲染并有效地绕过nested_forms 迭代器来解决该问题。

我浪费了 2 个多小时试图解决这个问题。谢谢 Shantanu!

于 2014-04-20T16:43:32.767 回答