8

Jak mogę używać wirtualnych atrybutów (getter, setter) w szynach 4, ponieważ usunięto "attr_accessible".Wirtualne atrybuty w szynach 4

jestem coraz problem, tutaj

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

mogę dotrzeć powyżej metody, ale nie jest w stanie dotrzeć setter poniżej, podczas próby aktualizacji/stworzenia.

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

Czy otrzymujesz attr_accessible i mylą attr_accessor? attr_accessible odszedł - zastąpić go silnymi parametrami. Ale o ile wiem, attr_accessor pozostaje. – Edward

+0

Przepraszam, jego attr_accessor: tags_list –

+2

jeśli używasz attr_accessor, nie powinieneś w ogóle definiować gettera lub setera. attr_accessor to makro, które tworzy je oba dla ciebie. –

Odpowiedz

12

Używanie wirtualnych atrybutów w Rails 4 prawie tak samo, jak w attr_accessible. Trzeba tylko dodać atrybut wirtualny do dozwolonych parametrów w kontrolerze (zamiast attr_accessible), a następnie dodać metody pobierające i ustawiające jak zwykle w modelu.

+2

Ale to nie działa z #new i #create w tej chwili, co czyni go praktycznie bezużytecznym, ponieważ będziesz musiał napisać 'your_virtual_attr =: something' oddzielnie przez cały czas. Ktoś jeszcze to zauważył i ma wskazówki, jak sobie z tym poradzić? – phikes

+1

Zauważyłem również, że wywołanie 'Tag.new (tags_list: [1, 2])' nie uruchamia wirtualnego atrybutu 'tags_list =()'. Czy to błąd? – Feech

+1

@phys, czy to po prostu 'before_action: your_model_params'? Możesz opcjonalnie sprecyzować:, only: [: new,: create] lub 'exlcude:, except: [: action1,: action2, etc.]'. –

Powiązane problemy