未定义的方法`find_or_create'

时间:2012-05-07 11:09:01

标签: activerecord ruby-on-rails-3.2

我想使用以下命令将数据记录在数据库中

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"  )

其中Profileactiverecord model

但我收到了以下错误

undefined method find_or_create for Profile class

Profile.public_methods未显示find_or_create方法,但Activerecord Api定义了上述方法。

可能出现什么问题?

3 个答案:

答案 0 :(得分:10)

find_or_create_by及其在Rails 3中已弃用。

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

答案 1 :(得分:3)

根据Rails 4 docs使用:

User.find_or_create_by(first_name: 'Joe')

而不是:

User.find_or_create_by_first_name('Joe')

答案 2 :(得分:1)

My Rails版

Rails -v
  Rails 3.1.3

我的Ruby版本

Ruby -v
  ruby 1.9.2p290

在Rails控制台中,我可以使用

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">