テーブルのフィールドを結合更新
-
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)
私の見解では、私は確認を更新しようとしているユーザーのクリックに0から1にfiedが。
<%= 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になると推測しているように見える:スルーを。 どのように私は、結合テーブルで確認フィールドを更新しますか?
解決
私は仕事を雇用することによって、ユーザに割り当てられていると思います。ジョエルが示唆するようにこのように、すべての雇用を更新することは、良いアイデアではありません。私はこれをお勧めします:
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つのジョブが一つだけのユーザーが取ることができることを意味します。
他のヒント
ここではそれで刺し(テストしていません)です。
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