سؤال

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)

في رأيي، أحاول تحديث fied مؤكدا من 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: من خلال. كيف يمكنني تحديث الحقل المؤكد في جدول مربوط؟

هل كانت مفيدة؟

المحلول

أعتقد أنه يتم تعيين وظيفة للمستخدم من خلال العمل. وبالتالي، فإن تحديث جميع الحقائق ليست فكرة جيدة، كما يوحي جويل. أود أن أوصى هذا:

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)

هذا يعني أنه لا يمكن اتخاذ وظيفة واحدة إلا بواسطة مستخدم واحد.

نصائح أخرى

هنا طعنة في ذلك (غير اختبارها):

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top