ruby-on-rails - Rails find_or_create_by 多个属性?

标签 ruby-on-rails activerecord model many-to-many dynamic-attributes

active-record 中有一个方便的动态属性,称为 find_or_create_by:

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

但是如果我需要通过多个属性来 find_or_create 该怎么办?

假设我有一个模型来处理组和成员之间的 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 想法的便利性。

最佳答案

多个属性可以用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)

关于ruby-on-rails - Rails find_or_create_by 多个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3046607/

相关文章:

ruby-on-rails - 创建裸轨 Controller 类

ruby-on-rails - 尝试使用 heroku gem 将我的数据库推送到 Amazon RDS 时出现 'Application Error'

php - 使用关系 AR 检索 "OR"条件

sql - GORM域映射问题

python - QAbstractItemModel index() 和 parent() 方法

ruby-on-rails - 如何自动运行 Ruby 脚本?

mysql - ActiveRecord::Base.transaction 对多个表的影响

sql - ActiveRecord 查找现有表索引

asp.net-mvc-2 - 在mvc2中创建ModelStateErrorMessage

ruby-on-rails - ruby rails : remembering state and RESTfulness