Rails find_or_create_by mehr als ein Attribut?

Es gibt ein praktisches dynamisches Attribut in active-record namens find_or_create_by:

Model.find_or_create_by_(: => "")

Aber was, wenn ich find_or_create nach mehr als einem Attribut suchen muss?

Angenommen, ich habe ein Modell, um eine M: M-Beziehung zwischen Group und Member namens GroupMember zu behandeln. Ich könnte viele Instanzen haben, wo member_id = 4, aber ich will nie mehr als einmal Instanz wo member_id = 4 und group_id = 7. Ich versuche herauszufinden, ob es möglich ist, etwas in der Art zu tun:

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

Ich weiß, dass es vielleicht bessere Möglichkeiten gibt, damit umzugehen, aber ich mag die Bequemlichkeit der Idee von find_or_create.

Mehrere Attribute können mit einem verbunden werden:

 GroupMember.find_or_create_by_member_id_and_group_id(4, 7) 

(Verwenden Sie find_or_initialize_by wenn Sie den Datensatz nicht sofort speichern möchten)

Bearbeiten: Die obige Methode ist in Rails 4 veraltet. Die neue Methode wird sein:

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

und

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

Edit 2: Nicht alle davon wurden aus den Rails herausgerechnet, nur die attributspezifischen.

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

Beispiel

 GroupMember.find_or_create_by_member_id_and_group_id(4, 7) 

wurde

 GroupMember.find_or_create_by(member_id: 4, group_id: 7)