6

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

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定义了上述方法。

可能有什么问题?

4

4 回答 4

11

find_or_create_by和它在 Rails 3 中被弃用了。

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

于 2012-05-07T11:32:59.273 回答
4

根据Rails 4 docs用途:

User.find_or_create_by(first_name: 'Joe')

代替:

User.find_or_create_by_first_name('Joe')
于 2016-11-24T13:05:34.500 回答
1

我的 Rails 版本

Rails -v
  Rails 3.1.3

我的红宝石版本

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">
于 2012-05-07T11:56:41.780 回答
0

~> 导轨 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
于 2015-08-15T21:59:19.913 回答