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 的第二个参数提供该字段的值,在新操作中该值将为空白,但如果外部服务调用导致失败,则在呈现表单页面时将插入该值。

于 2012-08-23T19:48:21.033 回答