5

simple_form_for @modelを使用してフォームを作成すると、送信時にpostparamsにすべての属性がparams[model]の下にグループ化されます。simple_formでこのグループを削除し、代わりに直接(params rootの下で)送信するにはどうすればよいですか?

<%= simple_form_for @user, do |f| %>
<%= f.input :name %>
<%= f.input :password %>
<%= f.submit %>

これで、名前とパスワードの属性は通常、params [:user] [:name]、params [:user] [:password]などで送信されます。simple_formでこれらをparams [:name]、params [:パスワード]など?

ありがとう!
ラムクマール

ps:なぜこれが必要なのか疑問に思われるかもしれませんが、私のアプリの大部分はAPIとして機能し、いくつかの属性がルートにあることを期待するリクエストを検証するための一連のメソッドを構築しました。まれに(パスワードを忘れた場合)、実際にフォームを提示する必要があり、これらのメソッドを使用する方法を探しています。

4

2 に答える 2

3

input_htmlを入力に渡すことにより、入力の名前を明示的に定義できます。

  input_html: { name: :name }

(プレーンな属性名に依存する私の側にリダイレクトしてサードパーティのエンドポイントにリソースを送信するためにこれが必要ですが、実際にはラベルを作成してタグを介して入力したくありませんでした;))

シンプルなフォームビルダーの実装も参照してください

于 2014-09-12T14:04:48.180 に答える
1

私が考えることができる2つの方法:

1つ目は、simple_formフォームの作成には使用せず、手動またはform_tagand*_tagメソッドを使用して作成することです。これらにより、フォームで使用されるパラメーターをより厳密に指定できます。

ただし、保持したい場合はsimple_form、別のコントローラーアクションを呼び出すようにします。コントローラをリファクタリングして、ロジックを別のメソッドに分解します。何かのようなもの:

class UsersController
  def create_from_api
    controller_logic(params)
  end
  def create_from_form
    controller_logic(params[:user])
  end
  def controller_logic(params)
    [actual work happens here]
  end
end
于 2013-03-01T22:19:22.020 に答える