조인 테이블 필드 업데이트
-
19-09-2019 - |
문제
class Job < ActiveRecord::Base
has_many :employments, :dependent => :destroy
has_many :users, :through => :employments
class User < ActiveRecord::Base
has_many :employments
has_many :jobs, :through => :employments
class Employment < ActiveRecord::Base
belongs_to :job
belongs_to :user # Employment has an extra attribute of confirmed ( values are 1 or 0)
내 견해로는 사용자 클릭에서 확인 된 FIED를 0에서 1로 업데이트하려고합니다.
<%= link_to "Confirm Job", :action => :confirmjob, :id => job.id %>
작업 컨트롤러에는 있습니다
def confirmjob
@job = Job.find(params[:id])
@job.employments.update_attributes(:confirmed, 1)
flash[:notice] = "Job Confirmed"
redirect_to :dashboard
end
나는 이것이 모두 잘못되었다고 확신하지만 Has_many에 관해서는 추측하는 것 같습니다. 결합 된 테이블에서 확인 된 필드를 어떻게 업데이트합니까?
해결책
나는 직업이 고용에 의해 사용자에게 할당된다고 생각합니다. 따라서 Joel이 제안한 것처럼 모든 고용을 업데이트하는 것은 좋은 생각이 아닙니다. 나는 이것을 추천 할 것이다 :
class Employment
def self.confirm!(job)
employment = Employment.find(:first, :conditions => { :job_id => job.id } )
employment.update_attribute(:confirmed, true)
end
end
컨트롤러에서
@job = Job.find(params[:id])
Employment.confirm!(@job)
이는 하나의 작업이 한 명의 사용자 만 사용할 수 있음을 의미합니다.
다른 팁
여기에 찌르기가 있습니다 (테스트되지 않음).
def confirmjob
@job = Job.find(params[:id])
@jobs.employments.each do |e|
e.update_attributes({:confirmed => 1})
end
flash[:notice] = "Job Confirmed"
redirect_to :dashboard
end
제휴하지 않습니다 StackOverflow