【问题标题】:How to construct form_tag URL that PUTs to an external API如何构造 PUT 到外部 API 的 form_tag URL
【发布时间】:2023-03-15 22:23:02
【问题描述】:

我正在使用 Shopify API http://api.shopify.com/

还有 Shopify Gem:https://github.com/Shopify/shopify_api,它完成了大部分繁重的工作 - 只是不知道如何让它工作。

要更新 @variant 对象,我需要在此处放置:PUT /admin/variants/#{id}.json

在 config/routes.rb 中,我使用 resources :variants 创建了默认资源路由,现在我正在尝试制作一个更新变体资源的表单,但无法将表单配置为具有正确的操作。

基本上,我正在使用一个文本字段输入构造 form_tag,该输入接受一个整数并更新 variant.inventory_quantity

Rake Routes 给我这个:

rake routes: 

variants     GET    /variants(.:format)           variants#index
             POST   /variants(.:format)           variants#create
new_variant  GET    /variants/new(.:format)       variants#new
edit_variant GET    /variants/:id/edit(.:format)  variants#edit
variant      GET    /variants/:id(.:format)       variants#show
             PUT    /variants/:id(.:format)       variants#update
             DELETE /variants/:id(.:format)       variants#destroy

【问题讨论】:

    标签: ruby-on-rails-3 shopify


    【解决方案1】:

    您需要像这样在 admin 命名空间下声明变体资源:

    config/routes.rb

    namespace :admin do
      resources :variants
    end
    

    编辑:

    Rails 接受 JSON 不需要做任何特别的事情。 Rails 会将您在 PUT 中传递的 JSON 转换为参数,并使其可用于更新方法。

    这里是'update'方法的标准实现:

    app/controllers/admin/variants_controller.rb

    def update
      @variant = Variant.find(params[:id])
     
      respond_to do |format|
        if @variant.update_attributes(params[:variant])
          format.html  { redirect_to(@variant,
                        :notice => 'Variant was successfully updated.') }
          format.json  { head :no_content }
        else
          format.html  { render :action => "edit" }
          format.json  { render :json => @variant.errors,
                        :status => :unprocessable_entity }
        end
      end
    end
    

    详情请参阅Rails guidelayout and rendering

    【讨论】:

    • 谢谢,现在我的表单代码看起来像:<%= form_tag admin_variant_path(variant.id) do %> <%= text_field_tag :inventory_quantity %> <%= submit_tag 'Save' %> <% end %> 这给了我一个看起来像这样的表单操作:/admin/variants/214902876 我如何获得表单操作末尾的 .json?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多