0

「コントローラー」という名前の親モデルがあります(成熟したアプリであり、私の決定ではありません)

belongs_to :controller
accepts_nested_attributes_for :controller

形:

= f.fields_for :controller do |c|
    = c.hidden_field :id, :value => @controller.id
    = c.text_field :slw_type

これは表示されません。

= f.fields_for :literally_anything_else do |c|
    = c.hidden_field :id, :value => @controller.id
    = c.text_field :slw_type

変数名を他の名前に変更すると、フォームが構築されます。Rails固有の予約名だと思います。

質問:

どうしたの?どうすればこれを機能させることができますか?

解決済み:

問題は、親モデルがまだ子モデルに関連付けられていないことでした。必要なすべての情報を提供しなかったという私の間違い。

これはうまくいきました。

def new
    @controller = Controller.find(params[:controller_id])
    @inspection = Inspection.new(:controller => @controller)

したがって、私の fields_for フォームビルダーも機能しました。

4

1 に答える 1

1

無害な変数名を選んでください。 not_really_a_controllerまたは何でも。それを変数とフォームに使用します。次に、実際のコントローラー (例: ActionController::Base 子孫) で、次のように、モデルが違いを認識しないように、着信パラメーターの名前を変更します。

before_filter :filter_params

private
 def filter_params
   if params[:not_really_a_controller]
     params[:controller] = params.delete(:not_really_a_controller)
   end
 end

私は過去に同様の理由でこの戦略を使用しましたが、controller. 試してみる価値はあります!

于 2013-02-26T15:44:24.017 に答える