2014-04-10 15 views
6

Ho un problema con la creazione di un modulo per i miei modelli ActiveResource ma non riesco a trovare una soluzione. Il problema è che il modello non conosce i campi, e genera un errore quando provo a creare un campo di testo:I moduli annidati hanno esito negativo quando si utilizza un modello ActiveResource, Rails 4

undefined method `firstname' for #<User:0x00000002946ec8> 

Per questa forma:

<%= form_for(@user) do |f| %> 
<div class="field"> 
    <%= f.label :firstname %><br> 
    <%= f.text_field :firstname %> 
</div> 

Questa è la mia dal mio controller:

def new 
    @user = User.new 
end 

Thie è il mio modello di utente:

class User < ActiveResource::Base 
    self.site = "https://***.com/api/v1.0/" 
end 

Ho provato quanto segue, ma questo non funziona bene con i modelli ActiveResource, non è in qualche modo in grado di memorizzare più dati recuperati. user.firstname è vuota, quando rimuovo la linea non è ...

attr_accessor :firstname, :lastname 

Poi ho trovato la gemma Fortify (https://rubygems.org/gems/fortify) ma l'ultimo aggiornamento è stato nel 2010 e l'installazione non funziona ...

Spero che qualcuno abbia familiarità con questo problema e possa aiutarmi nella giusta direzione.

+0

Hai visto questa discussione: https://stackoverflow.com/questions/2034700/form-for-with-nested-resources doppio controllare l'applicazione itinerari. –

+0

puoi elencare il tuo modello utente? –

+0

@maximus, ho modificato il mio post e aggiunto il modello utente. Al BaraaAl-Bourghli, non penso sia collegato. – Chris

risposta

8

Si deve usare .build [1] nel controller, invece di .new [2], come:

@user = User.build 

La ragione è che .new senza params solo crea un oggetto vuoto, mentre .build primi interroga il api per quello params si dovrebbe usare, appositamente per questo caso d'uso (see this thread for more details)

Documenti:

  1. http://api.rubyonrails.org/v3.2.13/classes/ActiveResource/Base.html#method-c-build

  2. http://api.rubyonrails.org/v3.2.13/classes/ActiveResource/Base.html#method-c-new

+0

Grazie per la risposta. Tuttavia, genera un errore di 500 server dall'API remota. Sai che tipo di risposta si aspetta o che tipo di richiesta fa? Dovrei preparare l'API in un modo? – Chris

+0

Effettua una chiamata a "" https: // ***. Com/api/v1.0/users/new.json' e si aspetta una risposta JSON valida con gli attributi di un nuovo utente (da cui popolerà il modulo). ActiveResource si aspetta che l'API sia RESTful, ma se la tua API lancia un 500 allora forse non lo è, dovresti indagare su cosa ha causato l'errore 500 all'altra estremità e leggere su REST se non sei sicuro a riguardo ([questa risposta] (http://stackoverflow.com/questions/2217758/what-is-a-rest-api) è un buon punto di partenza. – omnikron

+0

Grazie, ho aggiunto la risposta a json in new e ha funzionato. :) – Chris

Problemi correlati