6

私はRyanBatesのnested_formgemを使用しています。ネストされたフィールドを一覧表示する順序を制御できるようにしたいです。動作する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

は2番目の引数を受け入れることに注意してください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|

お役に立てれば。

于 2012-12-16T00:24:42.990 に答える
7

ネストの関連付けがあるモデルでは、次のようになります。

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

入れ子になったgemは奇妙な振る舞いをしているようです(私の意見ではバグです)。レンダリングするコレクションが指定されると、レンダリング前に「id」で並べ替えられます。ほとんどの人には透過的かもしれませんが、状況によっては静かに不快です。

Shantanuによる上記のソリューションは、fields_forにコレクションを直接提供してレンダリングし、nested_formsイテレーターを効果的にバイパスすることで、この問題を解決します。

私はこれを解決するために2時間以上無駄にしました..ありがとうShantanu!

于 2014-04-20T16:43:32.767 に答える