现在我有一个
的工作表 has_many :applicants
has_many:users, through: :applicants
和申请人表
belongs_to :job
belongs_to :user
和一个带
的用户表has_many :applicants
has_many:jobs, through: :applicants
因此,用户通过申请人表连接到Jobs表,反之亦然。
我不确定我是否正确更新了模型。现在它看起来像这样:
def addapply
@job = Job.find(params[:id])
applicant = Applicant.find_or_initialize_by(job_id: @job.id)
applicant.update(user_id: current_user.id)
redirect_to @job
end
但我开始思考 - 这不会取代之前的任何关联吗?
我开始环顾四周,在其他人的代码中找到了这个:
def update
unless params[:user_relationships][:user_category_ids]
# Set default user category if not selected.
@user.user_category_relationships.build(
:category_id => '1',
:created_by_user_id => @current_user.id,
:name_id => @name.id
)
else
params[:user_relationships][:user_category_ids].each { |user_category_id|
@user.user_category_relationships.build(
:category_id => user_category_id,
:created_by_user_id => @current_user.id,
:name_id => @name.id
)
}
end
end
我不确定这一切是如何工作的,但也许我需要在更新之前使用.each迭代它们。
我不想替换已有的内容,我只想添加它。
简而言之,更新(或更确切地说是添加)has_many的最佳方式是:通过连接表关联?
答案 0 :(得分:1)
为什么不呢?
def addapply
@job = Job.find(params[:id])
applicant = Applicant.where(job_id: @job.id, user_id: current_user.id).first_or_create
redirect_to @job
end