2xbelongs_to, уникальный для B - PullRequest
1 голос
/ 26 июля 2011
def User
  has_many :conversation_participants
end

def Conversation
  has_many :conversation_participants
end

def ConversationParticipant
  belongs_to :conversation
  belongs_to :user
end

Я бы хотел добавить валидацию в ConversationParticipant, чтобы существовала только одна запись одного и того же пользователя (user_id) для одного разговора (dialog_id). Так что это будет неверно:

id  user_id  conversation_id
1   1        1
2   2        1
3   1        1 # <-- invalid
4   3        1

Любые ключевые слова, которые описывают эту проблему (для будущего Googlin ') приветствуются.

РЕДАКТИРОВАТЬ: некоторый код

c = Conversation.first
c.conversation_participants.build(:user => User.first)
c.save # => true

c.conversation_participants.build(:user => User.first)
c.save # => false

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

validates_uniqueness_of: user_id,: scope => [: chat_id]

Или сексуальные проверки:

проверяет: user_id,: уникальность => {: scope => [: разговор_ид]}

http://ar.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#M000086

1 голос
/ 26 июля 2011

Вы можете передать: uniq в has_many:

def User
  has_many :conversation_participants, :uniq => true
end

def Conversation
  has_many :conversation_participants, :uniq => true
end

def ConversationParticipant
  belongs_to :conversation
  belongs_to :user
end

Ассоциации RoR (ограничение уникальности составляет около 3/4 пути вниз).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...