【问题标题】:How can I specify prefix parameters when saving a nested ActiveResource?保存嵌套的 ActiveResource 时如何指定前缀参数?
【发布时间】:2012-06-04 18:58:20
【问题描述】:

我有一个嵌套的 ActiveResource 模型(即它在另一个模型的命名空间中)。尝试调用 save 会引发:

ActiveResource::MissingPrefixParam: client_id prefix_option is missing

如何提供所需的前缀?

这是我的课:

class Foo::Bar < ActiveResource::Base
  self.site = "http://www.example.com"
  self.prefix = "/clients/:client_id"
  self.element_name = "policy"
  self.collection_name = "policies"
end

这是我的保存尝试:

bar = Foo::Bar.new :client_id => 123
bar.valid? # => true
bar.client_id # => 123
bar.save # => ActiveResource::MissingPrefixParam...

我一次又一次地寻找对此的解释,但我只找到相同的说明:

When a GET is requested for a nested resource and you don’t provide the prefix_param an ActiveResource::MissingPrefixParam will be raised.

我正在尝试在http://www.example.com/clients/[client_id]/policies 访问我们服务器的 API 端点,但我显然未能提供 client_id,因此我的应用程序向 http://www.example.com/clients//policies 发出请求

服务器日志告诉我:ActionController::RoutingError (No route matches "/clients//policies/" with {:method=&gt;:post})

【问题讨论】:

    标签: ruby-on-rails-3.2 activeresource ruby-1.9.3


    【解决方案1】:

    如果您创建一个方法prefix_options,它将起作用,该方法提供包含所需client_id prefix_option 的哈希,如下所示:

    def prefix_options
      { :client_id => client_id }
    end
    

    【讨论】:

      【解决方案2】:

      我假设您要为特定客户创建新策略。您应该发布您的政策详细信息的路径应该是:

      client_policies_path(@client.id)
      

      如果你使用的是表单,你可以像这样使用form_for:

      form_for [@client, @policy] do
      

      @client@policy 由 PolicyController 中的 #new 操作创建,如下所示:

      def new
        @client = Client.new(params[:client_id])
        @policy = @client.policies.build
        # ...
      end
      

      【讨论】:

      • 谢谢,但它不起作用。 (我看不出它是如何工作的,但无论如何我都试过了)。 1) 没有client_policies_path(我使用的是ActiveResource,而不是ActiveRecord,所以我的路由文件中不存在该路由;它在模型中指定)。 2)我没有使用表单(我正在使用控制台),并且设置控制器属性@policy@client 对结果没有影响。我正在使用ActiveResource 并且仅在实例上调用save。有问题的策略实例已经知道它自己的:client_id。 -- 我是不是误会你的回答了?
      猜你喜欢
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多