Нужно записать целые числа часов и минут и сохранить его в моей БД в качестве даты и времени - PullRequest
0 голосов
/ 05 марта 2012

РЕДАКТИРОВАТЬ: я переместил математику времени в модель в качестве обратного вызова.Я получаю эту ошибку:

NoMethodError in OutstandingsController#create
undefined method `hours' for nil:NilClass

Есть ли какой-то драгоценный камень, который мне нужно включить, чтобы иметь возможность вычислять время?Я думал, что это было включено в ActiveSupport ..?

class Outstanding < ActiveRecord::Base
  belongs_to :user

  before_validation(:on => :create) do
    self.panic_deadline = Time.now
    self.panic_deadline = self.panic_deadline + self.deadline_hours.hours
    self.panic_deadline = self.panic_deadline + self.deadline_minutes.minutes

    self.active = true
  end
end

class OutstandingsController < ApplicationController

def create
    @outstanding = Outstanding.new(params[:outstanding])
    @user = current_user
    @outstanding.user_id=@user.id

    respond_to do |format|
      if @outstanding.save ...

<%= form_for(@outstanding) do |f| %>
  <div class="field">
    <%= select_tag :deadline_hours, options_for_select(Array(0..99), 0)  %><%= f.label :deadline_hours %>
    <%= select_tag :deadline_mins, options_for_select(Array(1..59), 30) %><%= f.label :deadline_mins %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Ответы [ 3 ]

0 голосов
/ 05 марта 2012

Может быть что-то вроде

panic_deadline = Time.now
panic_deadline = panic_deadline + @outstanding.deadline_hours.hours
panic_deadline = panic_deadline + @outstanding.deadline_minutes.minutes

Убедитесь, что существует виртуальный атрибут для deadline_hours / deadline_minutes или он находится в схеме модели.

class Outstanding < ACtiveRecord::Base
  belongs_to :user

  before_validation(:on => :create) do
    self.panic_deadline = Time.now
    self.panic_deadline = self.panic_deadline + self.deadline_hours.hours
    self.panic_deadline = self.panic_deadline + self.deadline_minutes.minutes
    self.active = true
  end

  attr_accessor           :deadline_hours, :deadline_minutes

end
0 голосов
/ 05 марта 2012

Это может быть то, что вы хотите:

@outstanding.deadline_hours.hours.since(@outstanding.deadline_mins.minutes.from_now)

И вы должны рассчитать это в обратном вызове или в наблюдателе.

0 голосов
/ 05 марта 2012

Вы можете выполнять вычисления для объектов времени, как показано в Документах Ruby для времени

time = Time.now
time += (60 * 60) # Time is now 1 hour from now

Я думаю, что моя математика верна: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...