刚编写一个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
答案 0 :(得分:0)
我喜欢你从一个有效的解决方案开始,并寻求改进的帮助,而不是要求整个事情。我不想为你编写解决方案,但我会给你一些指示:
使用Javascript响应创建一个带有创建操作(以使其保持RESTful)的Taxes控制器。在Rails Guides
使用taxes#create
创建一个提交给该新操作(format: :json
)的表单。该表单包含产品名称的文本字段和提交按钮。
创建第二个表单,其中包含两个隐藏字段(product_name,tax)和一个隐藏的提交按钮。此表单将提交至products#create
让用户填写产品名称并提交第一个表单。成功时,使用Javascript:
用户可以提交包含产品名称和计算税金的新表格。