我目前有以下内容:
conversation_participation = @user.conversation_participations.find_or_create_by_conversation_id(conversation.id)
这正确地创建了一条记录,问题是conversation.read的默认值为false。
在这个特定的方法中,我希望在创建记录时默认值为true。现在我开始工作的唯一方法是:
conversation_participation = @user.conversation_participations.find_or_create_by_conversation_id(conversation.id)
conversation_participation.read = true
conversation_participation.save
问题是这次击中了DB两次。如何使用find_or_create并设置默认值:read =>真?
由于
答案 0 :(得分:1)
您可以尝试find_or_initialize_by...
然后将read
属性设置为正常
conversation_participation = @user.conversation_participations.find_or_initialize_by_conversation_id(conversation.id)
conversation_participation.read = true
conversation_participation.save
或
conversation_participation = @user.conversation_participations.find_or_initialize_by_conversation_id_and_read(conversation.id, true)
conversation_participation.save
使用after_initialize
(哦..你删除了你的评论,但这里的内容是为了以防万一)
class Conversation < ActiveRecord::base
def after_initialize
self.read ||= true # true if not already set
end
end
然后你可以find_or_create|initialize_by...
或者你希望继续进行。
如果您有兴趣,请点击callbacks。
答案 1 :(得分:1)
来自here:
使用
find_or_initialize_by_
如果你想要返回一个新的查找器 记录而不先保存。
这样的事情:
conversation_participation = @user.conversation_participations.find_or_initialize_by_conversation_id(conversation.id)
conversation_participation.read = true
conversation_participation.save
这应该只是INSERT
而不是INSERT
后跟UPDATE
。
答案 2 :(得分:0)
试试这个:
conversation_participation = @user.conversation_participations.find_or_create_by_conversation_id_and_read(conversation.id, true)