Aggiornamento unirsi campo della tabella
-
19-09-2019 - |
Domanda
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)
A mio avviso che sto cercando di aggiornare il confermata cato da 0 a 1 al clic dell'utente.
<%= link_to "Confirm Job", :action => :confirmjob, :id => job.id %>
Nel mio controller lavoro che ho
def confirmjob
@job = Job.find(params[:id])
@job.employments.update_attributes(:confirmed, 1)
flash[:notice] = "Job Confirmed"
redirect_to :dashboard
end
Sono sicuro che questo è tutto sbagliato, ma mi sembra di essere indovinare quando si tratta di has_many: attraverso. Come farei aggiornare il campo ha confermato in una tabella unita?
Soluzione
Credo che un lavoro viene assegnato a un utente con l'impiego. Così, l'aggiornamento tutte le occupazioni non è una buona idea, come suggerisce Joel. Vorrei raccomandare questo:
class Employment
def self.confirm!(job)
employment = Employment.find(:first, :conditions => { :job_id => job.id } )
employment.update_attribute(:confirmed, true)
end
end
dal controller
@job = Job.find(params[:id])
Employment.confirm!(@job)
Questo implica che un posto di lavoro può essere presa solo da un utente.
Altri suggerimenti
Ecco una pugnalata a lui (non testato):
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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow