【问题标题】:form_tag or form_for for updating an external API? Rails 3.2form_tag 或 form_for 用于更新外部 API?导轨 3.2
【发布时间】:2012-05-22 00:56:36
【问题描述】:

当连接到外部 json api 并提交表单以更新资源时,使用 form_for 或 form_tag 更好吗?

具体来说,我使用的是 Shopify API http://api.shopify.com/

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

==== 更新 ====

是的,有一个 shopify API gem:https://github.com/Shopify/shopify_api,它完成了大部分繁重的工作 - 只是无法弄清楚如何使它工作。

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

但我不能完全正确地构造 form_tag。我有这些路线:

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】:

    您的应用是否定义了模型?如果是这样,您应该可以使用 form_for。如果没有,那么您必须使用 form_tag

    form_for 将模型实例作为参数(因此得名)。表单字段的输出更简洁,因为 form_for 可以从模型中推断出很多信息。您还可以使用 fields_for 进行嵌套表单。

    如果你使用 form_tag,那么你需要编写更多的代码来正确构造 HTTP 参数,以便 Rails 可以在服务器上重建 params 哈希。

    【讨论】:

    • 我相信我需要使用 form_tag 因为我没有使用模型实例。我直接从 Shopify API 在控制器中创建实例,例如:@products = ShopifyAPI::Product.find(:all, :params => {:published_status => 'published'})
    • 我一直在尝试将此实例移动到模型中,因为我认为这会使我的更新更方便,但我不确定是否可行
    • 我从未使用过 Shopify API。我确实使用 ActiveMerchant gem。我们创建了一个派生自 ActiveMerchant::Billing::CreditCard 的瞬态模型类,因此它具有所有 ActiveRecord 和辅助工具。 Shopify api 是否有配套的宝石?我喜欢丰富的模型和灯光视图层。也许我混淆了这个问题。无论如何,form_tag 有点乏味,但如果您的表单非常简单且 RESTful,那就没问题了。
    • 谢谢 pduey,我在上面放了更多信息。我会投票赞成你的答案,但我没有足够的声誉:/我是 n00b
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多