Rails基于两个字段查找或创建

Mat*_*iby 21 ruby ruby-on-rails

我有一个场地模型,我想这样做

Venue.find_or_create_by_
Run Code Online (Sandbox Code Playgroud)

但我只想要一个新的场地,如果一个名称和日期相同的场地尚未存在

例如

=> Venue(id: integer, location: string, showdate: datetime, created_at: datetime, updated_at: datetime)
Run Code Online (Sandbox Code Playgroud)

场地是独特的,需要创建,如果所述位置和所述showdate相似是不存在于分贝

von*_*rad 42

您可以使用链接将列链接在一​​起_and_.这应该做的伎俩:

Venue.find_or_create_by_location_and_showdate(location, showdate)
Run Code Online (Sandbox Code Playgroud)

  • 实际上没关系,我只是看了一下Rails源代码--Rails使用了一个method_missing函数,该函数对调用的方法执行正则表达式并对其进行分解.这是天才.如果有其他人感兴趣,请查看Rails源代码中的active_record/base.rb. (7认同)

kar*_*gen 7

在rails 4中你会做:

Venue.find_or_create_by(location: location, showdate: showdate)
Run Code Online (Sandbox Code Playgroud)

如果你问我,那就更漂亮了!