8

Come posso utilizzare gli attributi virtuali (getter, setter) nelle rotaie 4, come 'attr_accessible' rimosso.Attributi virtuali nelle rotaie 4

sto ottenendo problema, qui

def tags_list 
    @tags = self.tags.collect(&:name).join(', ') 
    end 

posso raggiungere superiore metodo, ma non in grado di raggiungere setter di seguito, quando si cerca di aggiornare/Crea.

def tags_list=(tags) 
    @tags = tags 
    end 
+1

Stai ottenendo attr_accessible e attr_accessor confuso? attr_accessible è andato - per essere sostituito da forti parametri. Ma per quanto ne so, resta attr_accessor. – Edward

+0

sorry, Its attr_accessor: tags_list –

+2

se si utilizza attr_accessor non è necessario definire un getter o setter. attr_accessor è una macro che crea entrambi per te. –

risposta

12

Utilizzare gli attributi virtuali in Rails 4 più o meno come con attr_accessible. Devi solo aggiungere il tuo attributo virtuale ai parametri consentiti nel tuo controller (invece di attr_accessible), quindi aggiungere i metodi getter e setter come al solito nel tuo modello.

# your_controller.rb 
private 

def your_model_params 
    params.require(:your_model_name).permit(:tags_list) 
end 
+2

Ma non funziona con #new e #create al momento, il che lo rende praticamente inutile, perché dovresti scrivere 'your_virtual_attr =: something' separatamente per tutto il tempo. Qualcun altro ha notato questo e ha un indizio su come gestirlo? – phikes

+1

Ho anche notato che chiamare 'Tag.new (tags_list: [1, 2])' non attiva l'attributo virtuale 'tags_list =()'. Questo è un bug? – Feech

+1

@phikes, è solo 'before_action: your_model_params'? Puoi opzionalmente specificare:, solo: [: new,: create] o 'exlcude:, tranne: [: action1,: action2, ecc.] '. –

Problemi correlati