8

Wie kann ich virtuelle Attribute (Getter, Setter) in Schienen 4 verwenden, wenn 'attr_accessible' entfernt wurde.Virtuelle Attribute in Schienen 4

ich Problem bin immer hier

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

kann ich obige Verfahren erreichen, aber nicht in der Lage Setter unten zu erreichen, wenn zu aktualisieren/erstellen versuchen.

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

Haben Sie attr_accessible und attr_accessor durcheinander gebracht? attr_accessible ist weg - durch starke Parameter ersetzt. Aber soweit ich weiß, bleibt attr_accessor. – Edward

+0

Sorry, seine attr_accessor: tags_list –

+2

Wenn Sie attr_accessor verwenden, sollten Sie überhaupt keinen Getter oder Setter definieren müssen. attr_accessor ist ein Makro, das beide für Sie erstellt. –

Antwort

12

Verwenden virtueller Attribute in Rails 4 ziemlich genau so wie mit attr_accessible. Sie müssen nur Ihr virtuelles Attribut zu den erlaubten Parametern in Ihrem Controller hinzufügen (statt attr_accessible), dann fügen Sie die Getter- und Setter-Methoden wie in Ihrem Modell üblich hinzu.

# your_controller.rb 
private 

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

Aber es funktioniert nicht mit #new und #create im Moment, was es ziemlich nutzlos macht, weil du 'your_virtual_attr =: irgendwas' die ganze Zeit separat schreiben müsstest. Hat das noch jemand bemerkt und weiß, wie man damit umgeht? – phikes

+1

Ich bemerkte auch, dass das Aufrufen von 'Tag.new (tags_list: [1, 2])' nicht das virtuelle Attribut 'tags_list =()' auslöst. Ist das ein Fehler? – Feech

+1

@phikes, ist es nur 'before_action: your_model_params'? Sie können optional angeben:, nur: [: new,: create] oder 'exlcude:, außer: [: action1,: action2, etc.]'. –