我有一个嵌套的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=>:post})
。
答案 0 :(得分:6)
如果你创建一个方法prefix_options
,它会提供一个包含所需client_id prefix_option
的哈希值,它会起作用,如下所示:
def prefix_options
{ :client_id => client_id }
end
答案 1 :(得分:-1)
我假设您要为特定客户创建新策略。您应该发布政策详细信息的路径应为:
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