문제

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top