如何将值从控制器传递给模型?

时间:2011-04-20 17:15:13

标签: ruby-on-rails

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
####

请帮忙吗?

3 个答案:

答案 0 :(得分:1)

您只需获取对象并将其值更改为:

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

但是,这实际上是属于模型的代码,应该用模型方法包装。

答案 1 :(得分:1)

由于关系是has_many,您需要使用特定时间,而不是聚合:

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

在这种情况下,选择并操纵最后一个WorkTime记录。也许你想使用第一个,或者选择条件:

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

有很多方法可以选择正确的记录进行操作,但你的问题有些模糊。

如果您要创建新条目而不是修改条目,则可能需要执行此操作:

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

这只是运用ActiveRecord模型关系。

答案 2 :(得分:1)

正如其他几个答案所提到的,你需要一个WorkTime类型的对象来传递值。

从您发布的代码中看起来并不像您有这样的实例。您可以找到一个(WorkTime.find ..)或创建一个(WorkTime.new ..)

看起来你有一个音符实例(@note),虽然我不知道它来自哪里......你可以使用以下方法获取适当的WorkTime对象:

@note.task.work_times

或其中的第一个:

@note.task.work_times.first