小编典典

Rails find_or_create_by 多个属性?

all

在活动记录中有一个方便的动态属性,称为 find_or_create_by:

Model.find_or_create_by_<attribute>(:<attribute> => "")

但是如果我需要通过多个属性来查找或创建呢?

假设我有一个模型来处理 Group 和 Member 之间的 M:M 关系,称为 GroupMember。我可以有很多 member_id = 4
的实例,但我不想多次遇到 member_id = 4 和 group_id = 7 的实例。我试图弄清楚是否可以做这样的事情:

GroupMember.find_or_create(:member_id => 4, :group_id => 7)

我意识到可能有更好的方法来处理这个问题,但我喜欢 find_or_create 想法的便利性。


阅读 65

收藏
2022-06-28

共1个答案

小编典典

多个属性可以用一个连接and

GroupMember.find_or_create_by_member_id_and_group_id(4, 7)

find_or_initialize_by如果您不想立即保存记录,请使用)

编辑: 上述方法在 Rails 4 中已弃用。新的方法是:

GroupMember.where(:member_id => 4, :group_id => 7).first_or_create

GroupMember.where(:member_id => 4, :group_id => 7).first_or_initialize

编辑2: 并非所有这些都被排除在rails之外,只是属性特定的那些。

https://github.com/rails/rails/blob/4-2-stable/guides/source/active_record_querying.md

例子

GroupMember.find_or_create_by_member_id_and_group_id(4, 7)

变成了

GroupMember.find_or_create_by(member_id: 4, group_id: 7)
2022-06-28