1

JSONを介してサードパーティのAPIとやり取りするフォームを作成しています。私の目標は、フォームに入力された値に基づいて両方のJSON呼び出しを作成できるようにすることです。JSON応答がエラーを返した場合、form_fieldsに応答の生成に使用された値を維持させたいと思います。

フォームを作成し、JSONフィールドをフォームにバインドするにはどうすればよいですか?

モデルに結び付けられたとき、私は通常次のようなものを持っています:

<%= form_for @person do |f| %>
  <%= text_field_with_label f, :first_name %>
<% end %>

そして私のコントローラーには次のようなものがあります。

def new
 @person = Person.new
end

しかし、モデルがない場合、これをどのように設定しますか。コントローラの新しいアクションには何が含まれますか?空のJSON構造?最初のJSON呼び出しを行うために使用される値を保持するように入力フィールドを設定するにはどうすればよいですか(エラーが発生したときに応答によってユーザーがフォームに戻る場合)。

4

1 に答える 1

1

form_forを使用する代わりに、form_tagおよびその他の*_tagメソッドを使用します。上記の例は次のようになります。

<%= form_tag :controller => 'users', :action => 'myaction' %>
  First Name <%= text_field_tag :name, params[:name] %>
<% end %>

次に、選択したコントローラーとアクションでこれを処理できます。また、routes.rbファイルにアクションのカスタムルートを追加する必要があることを忘れないでください。

get 'users/new'
post 'users/myaction'

コントローラアクションの一般的なロジックは次のとおりです。

def new
end

def myaction
  success = call_external_service_here
  if success
    redirect_to 'somewhere'
  else
    render 'new'
end

コントローラでは、新しいメソッドを空白のままにします。text_field_tagの2番目の引数は、フィールドの値を提供します。このフィールドは、新しいアクションでは空白になりますが、外部サービス呼び出しが失敗した場合、フォームページがレンダリングされるときに値が挿入されます。

于 2012-08-23T19:48:21.033 に答える