使用rails填充api数据

时间:2016-01-26 18:22:21

标签: ruby-on-rails ajax

刚编写一个rails 4应用程序包含一个简单的表单,可以在提交时创建产品。

在用户提交并将产品保存到数据库之前我想添加一个小的验证,调用外部API作为参数接收客户端表单字段,并使用ajax将其输出显示到网页。

目前的行为是它保存产品,并在整个页面刷新后显示API数据。

预期的是,并非所有页面都刷新,而只是API结果(税务部分),再次点击一个不同的提交按钮,它将最终提交表单.. 我很感激任何实现它的想法,

_form.html.erb

<%= form_for @product, remote: true do |f| %>
 <%= f.text_field :name, placeholder: :name %>
  <% unless @product.id.nil?
     @product.taxes_from_api.each do |t| %>
       <%= render "tax", :f => t %>
  <% end %>
 <%= f.submit %>
<%= end %>

products_controller.rb:

def create
 @product = Product.new(product_params)
 respond_to do |format|
  if @product.save
    format.html 
  else
    format.html { render action: 'new' }
    format.json { render json: @product.errors, status: :unprocessable_entity }
    format.js   { render json: @product.errors, status: :unprocessable_entity }
  end
 end
end

product.rb:

  def taxes_from_api
    API:get_taxes(product.name) # not really important 
  end

1 个答案:

答案 0 :(得分:0)

我喜欢你从一个有效的解决方案开始,并寻求改进的帮助,而不是要求整个事情。我不想为你编写解决方案,但我会给你一些指示:

  1. 使用Javascript响应创建一个带有创建操作(以使其保持RESTful)的Taxes控制器。在Rails Guides

  2. 上查看更多相关信息
  3. 使用taxes#create创建一个提交给该新操作(format: :json)的表单。该表单包含产品名称的文本字段和提交按钮。

  4. 创建第二个表单,其中包含两个隐藏字段(product_name,tax)和一个隐藏的提交按钮。此表单将提交至products#create

  5. 让用户填写产品名称并提交第一个表单。成功时,使用Javascript:

    1. 将产品名称从一个表单复制到另一个表单。
    2. 在第二张表格上填写税款。
    3. 隐藏第一个表单的提交按钮。
    4. 显示第二个
    5. 的提交按钮
  6. 用户可以提交包含产品名称和计算税金的新表格。