1
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)

私の見解では、ユーザーのクリックで確認済みフィールドを 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: through に関しては推測しているようです。結合されたテーブルの確認済みフィールドを更新するにはどうすればよいですか?

4

2 に答える 2

2

仕事は雇用によってユーザーに割り当てられていると思います。したがって、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)

これは、1人のユーザーだけが1つのジョブを実行できることを意味します。

于 2009-10-05T05:49:32.583 に答える
0

ここに刺し傷があります(テストされていません):

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
于 2009-10-05T03:09:02.773 に答える