2016-06-27 2 views
0

Я создал ассоциацию has_and_belongs_to_many между пользователями и проектами, чтобы пользователь мог присоединиться к проекту. Однако существует таблица ассоциации, я не уверен, как создать ассоциацию.Rails 4 - has_and_belongs_to_many assocation

View

Schema

+0

Вопрос здесь в том, как написать код для определения пользователя для проекта с has и принадлежит ко многим ассоциациям? –

+0

да! Я не уверен, с чего начать T_T –

ответ

0

Поскольку у Вас есть свой проект ID внутри спрятан вы можете просто сделать это внутри JOIN (пост) действие

def join 
    @project = Project.find(params[:project][:id]) 
    current_user.projects << @project 
end 

так что если у вас есть экземпляр @project и экземпляра пользователя - в моем примере это current_user (например, если вы используете devise), то вы просто назначили бы их с помощью оператора < <

Вот ссылка:

http://guides.rubyonrails.org/association_basics.html#has-many-association-reference

Надеется, что это помогает

+0

Спасибо, что ответили. Как бы я затем отобразил пользователей, которые нажали присоединиться к группе? –

+0

Я как-то понял, спасибо! Я не могу выдвинуть еще ... –

1

Я определенно должны рекомендовать вам не использования has_and_belongs_to_many, потому что нет никакого способа для вас сделать, чтобы обратные вызовы, валидации и так на.

Определенно приятно использовать настоящую модель соединения и использовать has_many, through.

class User 
    has_many :project_users, dependent: :destroy 
    has_many :projects, through: :project_users 
end 

class Project 
    has_many :project_users, dependent: :destroy 
    has_many :users, through: :project_users 
end 

class ProjectUser 
    belongs_to :project, required: true 
    belongs_to :user, required: true 

    validates :project, uniqueness: { scope: :user } 
end 

Это работает очень легко, вы можете сделать:

User.update(project_ids: [1,5,6,7]) 

И будет присоединиться к пользователю этих проектов, если какие-либо валидация не удастся.

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

+0

Спасибо за отзыв! Не стесняйтесь помнить об этом! –

Смежные вопросы