2016-02-29 2 views
0

Я использую Rails 4.2.3 и MySql 5.5.37. У меня есть модель, основанную на следующей таблице БД ...Как сохранить дату в моей модели?

mysql> desc user_objects; 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| user_id | int(11)  | YES | MUL | NULL |    | 
| object  | varchar(255) | YES |  | NULL |    | 
| day  | date   | YES |  | NULL |    | 
| total  | int(11)  | YES |  | NULL |    | 
| created_at | datetime  | NO |  | NULL |    | 
| updated_at | datetime  | NO |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

В мой контроллер, я пытаюсь обрабатывать параметры, представленные в форме, и поэтому я использую это ...

def create 
    @current_user = User.find(session["user_id"]) 
    … 
    puts user_object_params 
    @user_object = UserObject.new(user_object_params) 
    puts @user_object.object 
    puts @user_object.day 
    puts @user_object.total 

Даже если первый «Puts» выводит строки «{» object »=>« 3 »,« day »=>« 02/28/2016 »,« total »=>« 77 »}», третий помещает строку («@user_object». день ") ничего не выводит. Что мне нужно сделать, чтобы получить мой объект даты, созданный в моей модели, с помощью «нового» вызова?

Редактировать: Это определение user_object в файле "./app/models/user_object.rb".

class UserObject < ActiveRecord::Base 

    validates :day, :presence => true 
    validates_numericality_of :total 
    validates :object, :presence => true 

    def self.find_total_by_user_object_month_and_year(user_id, object, month, year) 
    sum(:total, :conditions => ['user_id = ?', user_id, 'object = ?', object, 'month(day) = ?', month, 'year(day) = ?', year]) 
    end 

    def self.find_total_by_user_object_and_year(user_id, object, year) 
    sum(:total, :conditions => ['user_id = ?', user_id, 'object = ?', object, 'year(day) = ?', year]) 
    end 

end 

Изменить 2: В ответ на ответ дается, в том числе это в моем контроллере

puts user_object_params[:day] 
    @user_object.day = user_object_params[:day] 
    puts @user_object.day 

Печатает «02/23/2016» для Teh первых «пут», но тогда ничего напечатано для второго «ставит».

+0

do '@ user_object.object' и' @ user_object.total' имеют правильные значения? – jvillian

+0

Что такое определение класса для UserObject и какова его ответственность? Это какой-то объект формы или что это? –

+0

Если вы успешно сохранили дату в этом столбце, то все, что вы сделали здесь, должно работать. – tadman

ответ

0

Отправляясь, чтобы открыть ответ, но ожидаем, что для этого потребуется некоторая итерация.

Предполагая, что @user_object.object и @user_object.total ведут себя правильно (вам необходимо это подтвердить), я подозреваю, что вы испытываете неуклюжие проблемы с Ruby Date (или связанные с ними).

Убедитесь, что (a) @user_object.day определен (в вашей миграции) в том формате, который вы хотите (вы сохраняете строку, дату или дату?) И что (b) user_object_params[:day] отформатирован таким образом, который соответствует тип, определенный в вашей миграции.

Существуют хорошо известные субаренды (чтение, различие), как обрабатывать Ruby и Rails Даты и DateTimes. Возможно, это корень вашей проблемы.

Чтобы преобразовать строку даты в DateTime, вы будете иметь, чтобы сделать что-то вроде:

DateTime.strptime("06/18/2013", "%m/%d/%Y") 

, как обсуждалось here. Так что, возможно, прежде чем делать @user_object.new(user_object_params), что вам может понадобиться, чтобы сделать что-то вроде:

user_object_params[:day] = DateTime.strptime(user_object_params[:day], "%m/%d/%Y") 

Рыбалка здесь, но думал, что это может помочь.

+0

Столбец поврежден в моей миграции так: «t.date: day». В связи с этим «user_object_params [: день] отформатирован таким образом, который соответствует типу, определенному в вашей миграции,« я не понимаю, что вы подразумеваете под этим. Можете ли вы привести пример, предпочтительно один тах использует формат «% m /% d /% Y»? – Dave

+0

Привет, Дейв. Я привел пример. См. Строку strptime выше. Вы попробовали? – jvillian

0

это выглядит, как вы получаете PARAMS правильно, однако, чтобы проверить, если проблема заключается в UserObject.new(user_object_params) частях, что вы можете попробовать это попытаться индивидуально назначить значения

@user_object = UserObject.new 
@user_object.object = user_object_params[:object] 
@user_object.day = user_object_params[:day] 
@user_object.total = user_object_params[:total] 

, а затем попытаться вывести значение ,

У меня такое чувство, что атрибут object противоречит некоторым внутренним атрибутам рельсов.

Чтобы проверить это, вы можете индивидуально назначить значение, кроме объекта attr. или удалить ключ object в хеш.

+0

Пробовал ваше предложение, но все равно не играл в кости. Эта строка «@ user_object.day = user_object_params [: день]» не сохраняет значение того, что отправлено. Это как-то связано с тем, что поле моей модели - это дата, не так ли? Как я могу сообщить Rails о принятии поданной даты в определенном формате? – Dave

+0

как насчет изменения формата вручную, что-то вроде 'user_object_params [: day] .gsub ('/', '-')' – sameera207

+0

Уверен, я купил этот снимок, но разве это Rails? Кажется, что tehre будет какой-то настройкой где-нибудь, что я смогу сказать Rails waht мой формат даты shoudl be. Существует ли такая установка? – Dave

Смежные вопросы