2014-10-11 2 views
0

У меня есть 3 моделиСохранение идентификатора объектов к вложенной has_many через модель

class User < ActiveRecord::Base 
    has_many :projects 
    has_many :project_files, through: :projects 

class Project < ActiveRecord::Base 
    belongs_to :user 
    has_many :project_files 

class ProjectFile < ActiveRecord::Base 
    belongs_to :project 

Когда я создаю project_file используя что-то вроде:

@project = current_user.projects.find(params[:id]) 
@project.project_files.new 

Это не сохраняет пользователи идентификатор в project_file, но он сохраняет идентификатор проектов.

Я хочу, чтобы иметь возможность получить доступ к нему пользователей по телефону @project_file.user и вернуть идентификатор

+0

Я думаю, что ваш синтаксис: '@ project.project_file.new' неверен, вы уверены, что он работает? Это должно быть: '@ project.project_files.new' вместо этого. – Surya

+0

Извинения Я написал это неправильно в этом примере, я сейчас отредактировал код. У меня есть '@ project.project_files.new' в моем коде –

+0

Извините, но' current_user.project.find (params [: id]) 'также должен быть:' current_user.projects.find (params [: id]) ' – Surya

ответ

0

Посмотрев на вашем gist, кажется, что вы, чтобы изменить ваши ассоциации немного для того, чтобы сделать вещи работать, как вы ожидали:

class User < ActiveRecord::Base 
    has_many :project_files 
    has_many :projects, through: :project_files 

class Project < ActiveRecord::Base 
    has_many :project_files 
    has_many :users, through: :project_files 

class ProjectFile < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :user 

Кроме того, нет никакого смысла иметь user_id колонки для Project, если вы не собираетесь использовать его для различных целей, чем просто ассоциации, я имею в виду, что вам не нужно это, если user_id в проектах и ​​project_files - goin g, чтобы они были одинаковыми. Ну, теперь вы можете сделать это с current_user использованием project_files:

@project = Project.find(params[:id]) # project to be associated 
@project_file = current_user.project_files.build(project: @project) 

или:

@project_file = current_user.project_files.build(project_id: params[:id]) 

, а затем:

@project_file.save # save the association between user and project! 

Ваш user_id в project_files должны быть сохранены и стремится к БД Теперь. Но он не сохранит user_id в projects, так как нет смысла иметь user_id в двух разных таблицах (если вы не укажете один в своем комментарии/вопросе).

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