0

さまざまな理由から、従来のネストされたフォーム (ページのプライマリ モデルのサブグループのようにフィールドを扱うという意味でネストされたもの) を避ける必要がありますが、それでもインデックス スタイルの名前でグループ化されたフィールドを維持したいので、これを持っています:

<%= simple_fields_for :crate_request do |ff| %>
 <%= ff.input :_create, :label => "crate needed", :as => :boolean %>
 <%= ff.input :details, :as => :text %>
<% end %>

レンダリングされたフィールドには期待どおりの名前が付けられ ( のような名前でparams[:crate_request][:details])、検証エラーのあるフォームを送信して再レンダリングする必要があるまで、すべてがうまく見えます。paramsフィールドには、ハッシュに保存された送信された値が事前に入力されません。私は simple_form を使用していますが、それは simple_form だけの問題ではないようです。ネイティブの Rails ヘルパーも同じことをしているようです。

質問: から各フィールドの値を手動で設定することなく、params ハッシュからフィールドを自動的に事前に入力する方法はありますparamsか?

4

2 に答える 2

1

オブジェクトを追加の引数として に渡す必要があるだけですsimple_fields_for

フォーム ビルダーはオブジェクトがメソッドとしてフィールド アクセサーを持っていることを想定していますが、ハッシュ ( params[:create_request])しか取得していないため、 を使用OpenStructして、欠落しているメソッド呼び出しをハッシュ ルックアップに変換するオブジェクトを作成できます。

最終的な解決策は次のようになります。

<%= simple_fields_for :create_request, OpenStruct.new(params[:create_request]) do |ff| %>
  ...
<% end %>
于 2013-05-03T17:14:12.443 に答える
-1

交換

<%= ff.input :details, :as => :text %>

<%= input :details, :as => :text %>
于 2013-05-03T16:53:05.857 に答える