2012-05-07 18 views
6

voglio upsert record nel database utilizzando seguente comandometodo non definito `find_or_create'

Profile.find_or_create(fname: contact.FirstName, lname: contact.LastName, 
    company: account.Name, title: contact.Title, user_id: contact.CreatedById, 
    account_id: account.Id, contact_id: contact.Id, type: "contact" ) 

dove Profile è un activerecord model

ma ottengo l'errore seguente

undefined method find_or_create for Profile class 

Profile.public_methods non lo fa mostra il metodo find_or_create ma Activerecord Api definisce il metodo sopra.

Cosa potrebbe essere che non va?

+0

si utilizza una rotaie 4 versione del metodo . – RGB

risposta

10

sua find_or_create_by e la sua deprecato in Rails 3.

uso @foo = Foo.find_by_bar("baz") || Foo.create(:bar => "baz")

+3

Non penso che sia proprio vero. 'find_or_create_by' non è deprecato. Sono i metodi generati dinamicamente correlati come 'find_or_create_by_bar' che sono deprecati. – barendt

1

mio Rails versione

Rails -v 
    Rails 3.1.3 

mio Rubino Versione

Ruby -v 
    ruby 1.9.2p290 

In Rails console sono in grado di utilizzare il

find_or_create_by method like below 

1.9.2-p290 :001 > User.find_or_create_by_name("soundar") 
User Load (0.8ms) SELECT `users`.* FROM `users` WHERE `users`.`name` = 'soundar' LIMIT 1 
=> #<User id: 1, name: "soundar", age: 23, created_at: "2012-04-17 11:12:43", updated_at: "2012-04-17 11:12:43"> 
+0

mio è 'Rails -v 3.2.3' –

+1

È necessario utilizzare Model.find_or_create_by_field (attributes_hash). Ma hai usato find_or_create che è sbagliato. –

0

~> Rails 4

["Goose Island IPA", "Dogfish Head 90 Min IPA", "Mother Earth Oatmeal Stout", "Raleigh Brewing Mocha Stout"].each do |beer| 
    Beer.find_or_initialize_by(name: beer) 
end 
2

Come per il Rails 4 docs uso:

User.find_or_create_by(first_name: 'Joe') 

invece di:

User.find_or_create_by_first_name('Joe')