2012-05-07 20 views
6

Quiero upsert registro en la base de datos usando los siguientes comandosmétodo no definido `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" ) 

donde Profile es un activerecord model

pero me da error siguiente

undefined method find_or_create for Profile class 

Profile.public_methods no lo hace muestre el método find_or_create pero Activerecord Api define el método anterior.

¿Qué podría estar mal?

+0

está utilizando una versión de 4 carriles del método . – RGB

Respuesta

10

su find_or_create_by y su desuso en Rails 3.

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

+3

No creo que esto sea del todo cierto. 'find_or_create_by' no está en desuso. Son los métodos generados dinámicamente relacionados como 'find_or_create_by_bar' que están en desuso. – barendt

1

Mi rieles versión

Rails -v 
    Rails 3.1.3 

Mi Rubí Versión

Ruby -v 
    ruby 1.9.2p290 

En Rails consola estoy en condiciones de use el

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

mina es 'Rails -v 3.2.3' –

+1

Debe usar Model.find_or_create_by_field (attributes_hash) .Pero ha utilizado find_or_create que es incorrecto. –

0

~> Barras de 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

Según el Rails 4 docs uso:

User.find_or_create_by(first_name: 'Joe') 

en lugar de:

User.find_or_create_by_first_name('Joe') 
Cuestiones relacionadas