我正在构建一个通过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调用的值(在出现错误时响应将用户带回表单的情况下)。
答案 0 :(得分:1)
您可以使用form_tag和其他* _tag方法,而不是使用form_for。你上面的例子是:
<%= 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的第二个参数提供字段的值,在新操作中将为空白,但如果外部服务调用导致失败,则在呈现表单页面时将插入该值。