Frage

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)

Aus meiner Sicht Ich versuche, die bestätigt fied von 0 bis 1 auf Benutzer klicken zu aktualisieren.

<%= link_to "Confirm Job", :action => :confirmjob, :id => job.id %>

In meinem Job-Controller Ich habe

def confirmjob
  @job = Job.find(params[:id])
  @job.employments.update_attributes(:confirmed, 1)
  flash[:notice] = "Job Confirmed"
  redirect_to :dashboard
end

Ich bin sicher, das ist alles falsch, aber ich scheine zu raten, wenn es um has_many kommt: durch. Wie würde ich tun, um die bestätigte Feld in einer anderen Tabelle aktualisieren?

War es hilfreich?

Lösung

ich denke, dass ein Auftrag von der Beschäftigung zu einem Benutzer zugewiesen ist. So ist es, alle Anstellungen Aktualisierung keine gute Idee, wie Joel vermuten lässt. Ich würde das empfehlen:

class Employment
  def self.confirm!(job)
    employment = Employment.find(:first, :conditions => { :job_id => job.id } )
    employment.update_attribute(:confirmed, true)
  end
end

von Ihrem Controller

@job = Job.find(params[:id])
Employment.confirm!(@job)

Dies bedeutet, dass ein Auftrag kann nur von einem Benutzer entnommen werden.

Andere Tipps

Hier ist ein Stich an sie (nicht getestet):

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top