【问题标题】:working with JSON in a rails form_for在 rails form_for 中使用 JSON
【发布时间】:2012-08-23 19:23:00
【问题描述】:

我正在构建一个通过 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 调用的值(在出现错误时响应将用户带回表单的情况下)。

【问题讨论】:

    标签: ruby-on-rails json forms api


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

    【讨论】:

      猜你喜欢
      • 2012-03-12
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多