Cum pot specifica parametrii prefixului când salvez un ActiveResource imbricat?

Am un model Embedded ActiveResource (adică este în spațiul de nume al unui alt model). Încercarea de a apela save ridică:

ActiveResource::MissingPrefixParam: client_id prefix_option is missing

Cum furnizez prefixul necesar?

Iată clasa mea:

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

Iată încercarea mea de salvare:

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

Din când în când, am căutat elucidarea, dar găsesc doar aceeași instrucțiune:

Atunci când se solicită un GET pentru o resursă imbricată și nu vă furnizați prefix_param, va fi crescută ActiveResource :: MissingPrefixParam.

I'm trying to access our server's API endpoint at http://www.example.com/clients/[client_id]/policies, but I'm apparently failing to supply client_id, so my app makes its request to http://www.example.com/clients//policies

The server log tells me: ActionController::RoutingError (No route matches "/clients//policies/" with {:method=>:post}).

0

2 răspunsuri

Aceasta va funcționa dacă creați o metodă prefix_options , care furnizează o hash care conține client_id prefix_option , așa cum este cazul:

def prefix_options
  { :client_id => client_id }
end
0
adăugat

Presupun că doriți să creați o politică nouă pentru un anumit client. Calea spre care ar trebui să publicați detaliile politicii dvs. ar trebui să fie:

client_policies_path(@client.id)

Dacă utilizați un formular, puteți utiliza formularul similar:

form_for [@client, @policy] do

unde @client și @policy sunt create de acțiunea #new din Politica dvs. de politică astfel:

def new
  @client = Client.new(params[:client_id])
  @policy = @client.policies.build
  # ...
end
0
adăugat
Mulțumesc, dar nu funcționează. (Nu văd cum ar funcționa, dar am încercat oricum). 1) Nu există client_policies_path (folosesc ActiveResource , nu ActiveRecord , astfel că ruta nu există în fișierul meu de rute; în model). 2) Nu folosesc un formular (folosesc consola) și setarea atributelor controlerului @policy și @client nu are niciun efect asupra rezultatului. Folosesc ActiveResource și sun doar apelând save în instanță. Exemplu de politică în cauză deja cunoaște propriul său : clien
adăugat autor JellicleCat, sursa