Обновление поля таблицы соединений - PullRequest
1 голос
/ 05 октября 2009
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. Как мне обновить подтвержденное поле в объединенной таблице?

Ответы [ 2 ]

2 голосов
/ 05 октября 2009

Я думаю, что работа назначается пользователю по найму. Таким образом, обновление всех рабочих мест не является хорошей идеей, как предполагает Джоэл. Я бы порекомендовал это:

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)

Это означает, что одно задание может выполнять только один пользователь.

0 голосов
/ 05 октября 2009

Вот удар (не проверенный):

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
...