Rails - модельная ассоциация по представлениям - PullRequest
0 голосов
/ 19 мая 2011

У меня есть такие модели:

class Person
has_many :groups
has_many :group_memberships, :foreign_key => "member_id"
end

class Group_Membership
belongs_to :member, :class_name => 'Person'
belongs_to :group
end

class Group
belongs_to :person
has_many :group_memberships
has_many :members, :class_name => "Person", :through => "group_memberships", :foreign_key => "member_id"

Человек просит membership, создавая его модель с status false. Владелец group на своей странице person#show может видеть, кто запросил membership, а также groups, в котором он принимает участие. Начиная с groups и group_memberships belongs_to a person, но group_membership также belongs_to a group, как я могу сделать представление в person#show, которое позволяет person видеть, кто спросил для memberships на groups person, а также для того, что groups person имеет membership?

## РЕДАКТИРОВАНИЕ ##

status здесь false по умолчанию, потому что person будет просто принят в group, если владелец edit этот статус и установит его как true.

Идея взята из этого вопроса: Вопрос об ассоциации и моделях на рельсах

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Вот некоторый псевдо-код, который, я думаю, поможет вам найти путь к тому, что вы хотите: https://gist.github.com/981513

class Person
    has_many :groups
    has_many :group_memberships, :foreign_key => "member_id", :through => :groups

    scope :owned_groups, where(:is_owner => true).joins(:group_memberships) # gets all groups where this person is owner
end

class Group_Membership
    belongs_to :member, :class_name => 'Person'
    belongs_to :group

    # note that these attributes need to be defined
    # is_owner (boolean)
    # member_approved (boolean)

    scope :requested, :where(:member_approved => false)
end

class Group
    belongs_to :person
    has_many :group_memberships
    has_many :members, :class_name => "Person", :through => "group_memberships", :foreign_key => "member_id"
end

Справедливое предупреждение, я его вообще не проверял, и я до сих поризучение новых шаблонов AR:)

Я думаю, что ваше отношение group_memberships, вероятно, лучше всего подходит как отношение: through, а затем создает области вокруг различных «состояний», которые могут иметь отношения.Вы также можете проверить конечный автомат для получения помощи по этому вопросу.

0 голосов
/ 19 мая 2011

Я так думаю

class Person
  has_many :groups
  has_many :group_memberships, :foreign_key => "member_id"
  has_many :own_groups, :class_name => "Group", :through => "group_memberships", :foreign_key => "group_id"

end

class Group_Membership
  belongs_to :member, :class_name => 'Person'
  belongs_to :group
end

class Group
  belongs_to :person
  has_many :group_memberships
  has_many :asked_group_memberships, :class_name => 'Group_Membership', :conditions => ['status = ?', false]
  has_many :members, :class_name => "Person", :through => "group_memberships", :foreign_key => "member_id", :conditions => ['group_memberships.status = ?', true]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...