从连接表中删除特定用户

时间:2014-01-03 01:32:13

标签: ruby-on-rails model jointable

在Ruby on Rails中,我有一个用户模型和一个通过称为申请人的不同模型加入的工作模型。当用户想要“删除他们的应用程序”时,我有一个按钮,但我不知道如何删除特定用户,并且就此而言我不知道我是否做得很好添加它们(我知道它至少有效)。 user.rb

class User < ActiveRecord::Base
...
    has_many :applicants
    has_many:jobs, through: :applicants
end

job.rb

class Job < ActiveRecord::Base
...
  has_many :applicants
  has_many:users, through: :applicants
end

applicant.rb

class Applicant < ActiveRecord::Base
    belongs_to :job
    belongs_to :user
end

当某人申请工作时,我的工作控制器被称为:

class JobsController < ApplicationController
...
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
...
end

那个.update是否表示会有什么替换?我不确定我是否正确行事。

当有人想删除他们的应用程序时,我希望它再次转到我的工作控制器,但我不确定要做什么def,也许是这样的?

def removeapply
    @job = Job.find(params[:id])
    applicant = Applicant.find_or_initialize_by(job_id: @job.id)
    applicant.update(user_id: current_user.id).destroy
    redirect_to @job
end 

是否需要对user_ids列表进行排序,将它们全部保存到一个数组中,但是我要删除它,删除表然后将它们全部放回去?我不确定这有多么有效,更不用说了多少:为无知感到抱歉!

谢谢!

1 个答案:

答案 0 :(得分:0)

让我们假设用户想要删除自己的应用程序。你可以这样做:

class UsersController < ApplicationController
  def show
    @applicants = current_user.applicants # or @user.find(params[:id]), whatever you prefer
  end
end


class ApplicantsController < ApplicationController
  def destroy
    current_user.applications.find(params[:id]).destroy
    redirect_to :back # or whereever
  end
end

在你看来:

- @applicants.each do |applicant|
  = form_for applicant, method: :delete do |f|
    = f.submit

不要忘记设置路线:

resources :applicants, only: :destroy

有些观察,我可能会将协会命名为application而不是申请人。所以has_many :applications, class_name: 'Applicant'