0

以下の例は、このドキュメント ページから取得したものです:
https://github.com/activescaffold/active_scaffold/wiki/Chaining-Form-Fields

[例の開始]
列の配列を設定して、列が変更されたときに複数の列を更新し、列の更新を連鎖させることができます。

class UsersController < ApplicationController
  active_scaffold do |config|
    config.columns[:author].form_ui = :select
    config.columns[:author].update_columns = [:book, :editorial]
    config.columns[:book].form_ui = :select
    config.columns[:book].update_columns = :format
  end
end

この例では、書籍、編集、および形式のフィールドは、著者が変更されたときに更新され、書籍が変更されたときに形式のみが更新されます。新しい著者または書籍を使用するフォーム オーバーライドは、編集およびフォーマット列に対して定義する必要があります。【例末】

例では、「新しい著者または本を使用するフォームのオーバーライドを定義する必要があります」と述べています。

問題は、これらのフォームのオーバーライドを定義する方法です??

https://github.com/activescaffold/active_scaffold/wiki/Form-Overridesのドキュメントを読み、さまざまなフォームのオーバーライドを試しましたが、これまでのところうまくいきませんでした。つまり、列が再度レンダリングされていません。

与えられた例で必要なフォーム オーバーライドのコードを手伝っていただければ、それを自分のコードに移植できるはずです。

4

1 に答える 1

0

これが私の問題の解決策です:

「 https://github.com/activescaffold/active_scaffold/wiki/Chaining-Form-Fields 」の例に従いましたが、チェーン列で機能しなかった場合(最初の列を更新すると、すべてのチェーン列が正しく更新されますが、 2番目の列を更新すると、そのチェーン列が空白のリストにレンダリングされます)、これが私の問題を解決するための最初のステップであると思ったので、例のすぐ下で説明されている詳細に(盲目的に?)焦点を合わせました。新しい著者または本は、編集列とフォーマット列に対して定義する必要があります。そうでない場合、これらのフィールドは、再度レンダリングされるときに変更されません。」

ただし、これは当てはまりませんでした。これを機能させるためにヘルパーでフォームをオーバーライドする必要はありませんでした。ヘルパーでは「options_for_association_conditions」で十分です。例はv2.4の場合であるため、v3.0+ではフォームのオーバーライドは不要になっている可能性があります。

解決策は、サンプルwikiの次の段落にあります。「通常、変更された列の値のみが送信されます。更新された列をレンダリングするために別の値が必要な場合は、send_form_on_update_columnを有効にすると、すべてのフォームが送信されます」。私の問題は、2番目の列からチェーンされた列が最初の列の値も必要としたため、2番目の列を「send_form_on_update_column」で設定する(つまり、フォーム全体を送信する)ことで問題が解決したことです。

この例では、これは次のようになります。

config.columns[:book].send_form_on_update_column = true
于 2012-01-09T08:54:41.563 に答える