2011-04-20 144 views
0
class Task < ActiveRecord::Base 
    has_many :notes, :as => :notable, :dependent => :destroy 
    has_many :work_times, :dependent => :destroy 
end 

class WorkTime < ActiveRecord::Base 
    belongs_to :task 
end 


class NotesController < ApplicationController 


     end 
    end 
#### 

請幫忙嗎?如何將價值從控制器傳遞給模型?

+1

它看起來像你的「像」是正確的答案。它有什麼問題? – 2011-04-20 17:22:50

+0

這就是我爲#獲取未定義的方法'work_time'。我得到的日期,但最後一行代碼* work_time.start_time ==時間是錯誤。 – user659068 2011-04-20 17:28:02

回答

1

由於關係是has_many您將需要一個特定的時間來工作,而不是總:

work_time = @task.work_times.last 
work_time.start_time = Time.now 
work_time.save! 

在這種情況下,最後的工作時間記錄被選擇和操作。也許你想使用的第一個,或選擇它與一個條件:

work_time = @task.work_times.where(:active => true).first 

有很多的方式來選擇正確的記錄來操作,但你的問題是有些模糊。

如果您想創建一個新的項目,而不是修改一個,你可能會想這樣做:

@task.work_times.create(:start_time => Time.now) 

這只是行使ActiveRecord的模型關係。

1

只需將獲得的對象,只是改變像它的值:

user = User.first 
user.username = 'changed_name' 
user.save # and save it if you want 

但是,這實際上是屬於一種模式,應該由模型方法來包裝代碼。

+0

Soory我是Ruby Rails的新手我不明白,你究竟要求我做什麼?我的代碼正在工作,我可以得到一個日期。我只需要在work_time模型的start_time屬性中傳遞該日期 – user659068 2011-04-20 17:33:39

+0

WorkTime模型本身就是一個類。 start_time是該類的特定對象的屬性。因此,如果您有像'work_time = WorkTime.find(2)'這樣的對象,則可以在該對象上執行work_time.start_time以更改該值。總之,您首先必須創建一個WorkTime類型的對象,然後您可以設置任何值。 – Spyros 2011-04-20 17:36:05

+0

是的,我知道了,但workTime對我來說也是一個懸而未決的問題,我想在work_times表中填寫task_id來創建創建註冊服務器時生成的任務。現在我的work_times表爲空 – user659068 2011-04-20 17:45:50

1

正如一些其他答案所暗示的,您需要一個WorkTime類型的對象來傳遞值。

從你發佈的代碼看,你看起來並不像你有這樣的一個實例。您可以找到一個(WorkTime.find ..)或創建一個新的(WorkTime.new ..)

它看起來像你有一個筆記(@note)的實例,但我不知道在哪裏是來自..你也許可以使用來獲取適當的烹飪時間對象:

@note.task.work_times 

或與第一種:

@note.task.work_times.first 
相關問題