2012-08-23 36 views
1

我正在構建一個通過JSON與第三方API交互的窗體。我的目標是能夠根據輸入到表單中的值創建JSON調用。如果JSON響應返回錯誤,我希望form_fields保持用於生成響應的值。在導軌中使用JSON form_for

我應該如何去建立窗體並將JSON字段綁定到窗體?

當綁在模型我會常常碰到這樣的:

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

,並在我的控制器我有:

def new 
@person = Person.new 
end 

但我怎麼設置這時候有沒有模型。控制器上的新動作會是什麼?一個空的JSON結構?我將如何設置輸入字段,以便它們保留用於進行初始JSON調用的值(在發生錯誤時響應將用戶帶回表單的情況下)。

回答

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的第二個參數爲該字段提供值,該字段在新操作中將爲空白,但如果外部服務調用導致失敗,則會在呈現表單頁面時插入該值。

+0

夢幻般的答案 - 非常感謝亞當。 – cman77