更新Has_many加入表的最佳方法

时间:2014-01-03 19:52:01

标签: ruby-on-rails-4 has-many-through model-associations jointable

现在我有一个

的工作表
  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的最佳方式是:通过连接表关联?

1 个答案:

答案 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