我有3个模特
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
它不会将用户ID保存到project_file记录中,但会保存项目ID。
我希望能够通过调用@project_file.user
来访问用户并返回ID
答案 0 :(得分: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
列是没有意义的,除非你打算将它用于某种不同的目的,而不仅仅是关联,我的意思是,如果{我不需要它项目和project_files中的{1}}将是相同的。好吧,现在,您可以使用user_id
:
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
应该保存并立即提交给db。但是,它不会将project_files
保存在user_id
中,因为在两个不同的表中确实没有projects
(除非您在评论/问题中指出一个)。