在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列表进行排序,将它们全部保存到一个数组中,但是我要删除它,删除表然后将它们全部放回去?我不确定这有多么有效,更不用说了多少:为无知感到抱歉!
谢谢!
答案 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'
。