2013-05-07 13 views
5

in rails 2.3.11, ich habe unten in ModellKann keine Massen assign geschützten Attribute attr_accessor und attr_accessible

attr_accessor :person_id 

und in Controller

@project.person_id = current_user.id 

jetzt, ich bin Umwandlung dieser in rails 3.2.11 und ich bin bekommen

Can't mass-assign protected attributes: person_id 

so änderte ich im Modell, entfernte ich :person_id von attr_accessor und unterhalb der Linie hinzufügen

attr_accessible :person_id 

aber ich bin uisng in Controller person_id, hier ist es

@project.person_id = current_user.id 

ich diese jetzt

NoMethodError in ProjectsController#create 

undefined method `person_id=' for #<Project:0x19cc51a> 

eine Idee oder Hilfe bin immer, Wie kann ich das beheben? Wie kann ich beide attr_accessor & attr_accessible behandeln?

+0

setzen Sie sie in beide 'attr_accessible: person_id'; 'attr_accessor: person_id' –

+0

@ShawnBalestracci wenn ich beide' attr_accessible: person_id'; 'attr_accessor: person_id', bekomme ich' Kann geschützte Attribute nicht massenweise zuweisen: person_id' –

+1

Der Massenzuordnungsfehler kommt nicht von dieser Zeile: '@project.person_id = current_user.id', da dies nicht mass Zuordnung. – Arjan

Antwort

5

attr_accessor :person_id und attr_accessible :person_id sind nicht gleich.

attr_accessor ist die Ruby Methode. Kurz gesagt seine Abkürzung für Methoden:

def person_id 
    @person_id 
end 

def person_id=(value) 
    @person_id = value 
end 

attr_accessible ist die Rails Methode. Which erhält eine Liste von Attributen, denen eine Massenzuweisung erlaubt ist. Sie können über lesen.

Also in Ihrem Fall brauchen Sie beide.

attr_accessor :person_id 
attr_accessible :person_id 
+0

wenn ich beide attr_accessible: person_id; attr_accessor: person_id, ich bekomme keine geschützten Attribute massenweise zuweisen: person_id –

+0

Hm. Überprüfen Sie die 'config.active_record.whitelist_attributes = true' in Ihrer' application.rb'. Und versuche dann mit 'true' /' false' zu ​​spielen – ck3g

Verwandte Themen