2015-11-17 37 views
7

Quindi sto creando un'estensione spree in cui ho il mio attributo che ho aggiunto a Spree::Shipment e aggiunto un input durante il processo di checkout, il problema è che il mio attributo non fa parte del attributi consentiti per le spedizioni e non è chiaro come aggiungerlo agli attributi consentiti. Ho trovato la conversazione su this pull req che dice di usareSpree 3.0 aggiunta agli attributi consentiti nell'estensione

Spree::PermittedAttributes.shipment_attributes << :my_custom_attribute 

Tuttavia, non è chiaro Dove metto questo !?

"Oh, lo mise in spree.rb"

Questo non aiuta. Ho provato a mettere il codice in

lib/spree.rb 
lib/spree/permitted_attributes.rb 
lib/spree_decorator.rb 
lib/spree/permitted_attributes_decorator.rb 

(as suggested here) e tutti questi risultati in un errore che lamentano shipment_attributes non essendo definita (quindi presumibilmente il codice viene eseguito prima che il file principale definente PermittedAttributes è valutata) o semplicemente non accade nulla. Dove devo inserire questo codice per aggiungere il mio attributo all'elenco degli attributi consentiti?


Modifica: Poiché questo non sembra chiaro alle persone, ho provato tutte le cose elencate nei collegamenti che ho postato. Dicendomi di provare le cose in loro è piuttosto esasperante. Smettila.

+0

"Penso che potrebbe essere meglio aggiungerlo in ApplicationController o in qualche altro file che viene ricaricato con l'app. Potrebbero verificarsi problemi in cui le rotaie ricaricherebbero il codice dell'app e gli attributi sarebbero mancanti su quell'accessorio di classe" - Citato dal thread github ... hai provato in ApplicationController? – SsouLlesS

+0

Hai provato a inserirlo in un inizializzatore, come suggerito nell'aggiornamento dell'articolo che hai pubblicato? (http://www.rubycoloredglasses.com/2014/04/strong-parameters-with-spree-extensions/) – jphager2

+0

Ho anche un paio di attributi personalizzati e ho aggiunto 'Spree :: PermittedAttributes.shipment_attributes <<: my_custom_attribute' in config/initializers/spree.rb (alla fine) e ha funzionato per me –

risposta

0

Come si dice here si può inserire solo in ApplicationController.

Oppure si potrebbe sostituire l'intero permitted_params, aggiungendo il vostro da whitelist (da entrambe le mettendo questo codice direttamente nel application_controller.rb dopo l'ultimo end, che sarà al 100% di lavoro, o creando un nuovo file (ad esempio sotto lib, come si deve già provato)):

module Spree 
    module PermittedAttributes 

    # bunch of code 

    @@checkout_attributes = %i(
     email 
     use_billing 
     shipping_method_id 
     coupon_code 
     my_custom_attribute 
    ) 

    # bunch of code 

    end 
end 
+0

Vedere la mia modifica sul dirmi di provare le cose nei collegamenti che ho postato. – Shelvacu

+0

Non volevo irritarti o provocarti. Non immagino comunque un caso in cui la mia soluzione con app_controller non influenzi la situazione. Ma come dici tu –

2

"spree.rb" significa effettivamente config/initializers/spree.rb. Questo è il posto giusto per la configurazione di Spree. Ho notato che/quell'articolo menzionava vari file, ma mai questo file.

Una volta in questo file sia:

Spree::PermittedAttributes.shipment_attributes << :my_custom_attribute 

come lei ha ricordato o

Spree::PermittedAttributes.shipment_attributes.push :my_custom_attribute 

Se questo non dovesse funzionare è necessario fornire maggiori dettagli.