Updating beitreten Tabellenfeld
-
19-09-2019 - |
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?
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