Rails добавление идентификатора ресурса в другой ресурс через HABTM - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть 3 подходящие модели:

class User < ActiveRecord::Base
    has_and_belongs_to_many :groups
end

class Group < ActiveRecord::Base
    has_and_belongs_to_many :users
has_many :galleries
end

class Gallery < ActiveRecord::Base
    belongs_to :group
end

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

Мне трудно осмыслить, как это работает с контроллерами, и, возможно, я слишком много думаю о проблеме. Если я создаю группу, а затем иду, чтобы создать пользователя, каков наилучший способ добавления текущего group_id в модель пользователя? То же самое касается модели галереи ...

Это имеет смысл?

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

Большое спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: Уточнение Я определенно не имел никакого смысла в своем первоначальном вопросе, но мне удалось найти ответ с помощью друга.

Я закончил тем, что передал group_id в форму через хэш параметров следующим образом:

<%= link_to "Add User", new_admin_user_path(:group_id => @group.id) %>
<%= link_to "Add Gallery", new_gallery_path(:group_id => @group.id) %>

Затем, используя скрытое поле в моей форме, присваивая group_id скрытому полю "group_id":

<%= hidden_field_tag :group_id, params[:group_id] %>

И, наконец, в моих методах создания, добавление этих строк перед сохранением присваивает идентификатор group_id:

# Gallery only has one group
@gallery.group_id = params[:group_id]
# Users can belong to many groups
@user.groups << Group.find(params[:group_id])

Мне все еще нужно сесть и обернуться вокруг ответов, которые вы оба предоставили. Большое спасибо, что нашли время, чтобы помочь мне. Я очень ценю это.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

Я бы не определил бы это в контроллере, как предполагает Себес, а скорее в модели User.

Адаптируя свою идею:

def galleries
  Gallery.joins(:groups => :users).where("users.id = ?", self.id)
end

Затем, чтобы получить коллекцию галерей для объекта current_user:

current_user.galleries
0 голосов
/ 22 сентября 2011

Когда вы используете метод find из вашего контроллера, вы можете сделать его следующим образом:

Gallery.find :all, :joins => "INNER JOIN groups ON groups.gallery_id = galleries.id INNER JOIN users ON users.group_id = groups.id", :conditions => "users.id = #{@your_current_user_id}"

Он должен найти все галереи групп, к которым принадлежит пользователь.

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