Lui*_*igi 25 ruby-on-rails ruby-on-rails-4
以下面的例子为例:
GroupMember.where(:member_id => 4).first_or_initialize
如果我想说这样的话怎么办?
如果存在member_id为4的GroupMember,则"找到它".否则,创建一个GroupMember,其member_id为4,group_id为7.
所以我希望上面的语句只检查member_id - 但如果它不存在,我希望它创建一个具有多个属性的GroupMember.我该怎么写呢?我正在使用rails 4.0.
sco*_*ttb 46
这也有效:
GroupMember.where(member_id: 4).first_or_initialize(group_id: 7)
Run Code Online (Sandbox Code Playgroud)
传递给first_or_initialize的属性仅在创建新记录时使用,并且它们与"where"子句中的属性合并.
Nik*_*nov 40
这是我使用的参考 - http://apidock.com/rails/ActiveRecord/Relation/first_or_initialize
该方法的来源说明:
def first_or_initialize(attributes = nil, &block)
first || new(attributes, &block)
end
Run Code Online (Sandbox Code Playgroud)
因此,如果找不到记录 - 它会初始化一个新记录并传递给一个块.
你可以用它:
GroupMember.where(:member_id => 4).first_or_initialize do |member|
member.group_id = 7
end
Run Code Online (Sandbox Code Playgroud)
它只会执行新记录块.
| 归档时间: |
|
| 查看次数: |
19158 次 |
| 最近记录: |