2011-04-20 129 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