2013-03-28 80 views
1

通過外鍵鏈接導軌對象的最佳方式是什麼?這是我的例子。醫生有一張計時卡(每天收集工作時間)。我希望把醫生的id的任命表明這一點:通過外鍵鏈接導軌對象

從routes.rb中

resources :locations do 
    resources :practitioners, only: [:new, :create] 
    end 

    resources :practitioners, except: [:new, :create] do 
    resources :timecards, except: :delete 
    resources :appointments 
    end 

timecard.rb - 你可以在這裏看到我強迫timecard.practitioner_id爲3,但是這是強力測試努力。

class Timecard < ActiveRecord::Base 
    belongs_to :practitioner 
attr_protected :id 

    before_save :set_practitioner_id 

    def set_practitioner_id 
    if self.practitioner_id.blank? 
     self.practitioner_id = 3 
    end 
    end 
end 

而且從我的控制器......

def create 
    @practitioner = Practitioner.find(params[:practitioner_id]) 
    @timecard = Timecard.create(params[:timecard]) 


    respond_to do |format| 
     if @timecard.save 
     format.html { redirect_to @practitioner, notice: 'Timecard was successfully created.' } 
     format.json { render json: @timecard, status: :created, location: @timecard } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @timecard.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

我可以看到該參數的practitioner_id = 3(這是我想用什麼),我只是不知道如何訪問它在代碼中。

Parameters: 

{"utf8"=>"✓", 
"authenticity_token"=>"DIp4R31McXnBNP4NB06KDTzV+8lLcWvxbq1w9J+Z1+M=", 
"timecard"=>{ 
    "hours_worked"=>"2", 
    "activity_date(1i)"=>"2013", 
    "activity_date(2i)"=>"3", 
    "activity_date(3i)"=>"20", 
    "practitioner_id"=>"", 
    "location_id"=>"1" 
}, 
"commit"=>"Create Timecard", 
"practitioner_id"=>"3" <== this is what I want to use 
} 

回答

0

我假設一個醫生有許多考勤卡,所以你應該能夠做到像

# practitioner.rb 
has_many :timecards 

# controller 
@practitioner = Practitioner.find(params[:practitioner_id]) 
@timecard = @practitioner.timecards.build(params[:timecard]) 

具有協會成立將採取設置外鍵爲你的照顧。

+0

從業者有一張計時卡(收集每天工作的小時數) – Zippie 2013-03-28 01:04:50

+0

,這是不是很清楚,它是'has_one'或'has_many'關聯,但邏輯答案是'has_many',醫生有很多時間卡這是根據日期創建的。 – jvnill 2013-03-28 01:07:50

+0

has_many - 我嘗試了兩個答案,沒有得到它......所以我必須錯過別的東西。 – 2013-03-28 02:25:03

1

如果我理解你的問題,你可以簡單地保存考勤控制器之前設置@timecard.practitioner = @practitioner。您可以這樣做,因爲belongs_togives you a practioner=方法「分配關聯對象,提取主鍵並將其設置爲外鍵」。