我想限制用户拥有一份以上的工作。
这是我的路线:
resources :jobs do
resources :job_applications
end
job.rb
class Job < ApplicationRecord
has_many :job_applications
validate :limit_user_to_one_job_application
private
def limit_user_to_one_job_application
if user.job_applicaitons.count > 1
self.errors.add(:base, "You can only have one job application")
end
end
end
job_application.rb
class JobApplication < ApplicationRecord
belongs_to :user
belongs_to :job
end
user.rb
class User < ApplicationRecord
has_one :job_application
end
job_application_controller.rb
class JobApplicationsController < ApplicationController
before_action :authenticate_user!
def new
@job = Job.find(params[:job_id])
@job_application = @job.job_applications.create
end
def create
@job = Job.find(params[:job_id])
@job_application =
@job.job_applications.create(job_application_params)
@job_application.user_id = current_user.id
@job_application.save
end
在我的new.html.erb文件中以创建新的职位申请
<%= form_with(model: [ @job, @job.job_applications.build ],local: true) do |f| %>
<%= job_application attributes %> <br>
<%= job_application attributes %> <br>
..........
<%= f.submit %>
以上代码有效,使用户能够为特定作业创建许多作业应用程序,但仅将第一个作业保存在其数据库中。因此,我希望限制用户仅针对特定职位创建一个职位申请
答案 0 :(得分:0)
您可以在控制器或模型上执行此操作。
before_action :find_job, except: [:index, :new, :create]
before_action :limit_user_to_one_job_application, only: [:new, :create]
...
private
def find_job
@job = Job.find(params[:job_id])
end
def limit_user_to_one_job_application
if @job.job_applications.where(:user => current_user).count == 1
return redirect_to jobs_path, :notice => "You can only have one job application"
end
end
您会发现最好将@job.job_applications.where(:user => current_user).count == 1
用作User
上的方法,但为简单起见,我的意图很明确。
或模型(类似):
class JobApplication < ApplicationRecord
validate :limit_user_to_one_job_application
private
def limit_user_to_one_job_application
if user.job_applicaitons.count > 1
self.errors.add(:base, "You can only have one job application")
end
end
end
答案 1 :(得分:0)
按照帖子中提到的描述,您可以在联接模型中通过唯一性验证来进行管理。
class JobApplication < ApplicationRecord
belongs_to :user
belongs_to :job
validates_uniqueness_of :user_id, scope: :job_id
end
此验证将防止基于user_id和job_id的配对在联接模型中创建重复记录。
希望这会有所帮助。