我正在使用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” =>“ 2016/02/28”,“ total” =>“ 77”}“,第三行仍会显示( “ @ user_object.day”)什么也不打印。我该怎么办才能通过“新”调用在模型中创建日期对象?

编辑:这是文件“ ./app/models/user_object.rb”中user_object的定义。

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


为第一个“ puts”打印出“ 02/23/2016”,但是对于第二个“ puts”则不打印任何内容。

最佳答案

要打开一个答案,但希望它将需要一些迭代。

假设@user_object.object@user_object.total的行为正确(您需要确认这一点),我怀疑您正在遇到苛刻的Ruby Date(或相关)问题。

确保(a)@user_object.day在您的迁移中定义为所需的格式(要存储的是String,Date还是DateTime?),并且(b)user_object_params[:day]的格式应与迁移中定义的类型。

Ruby和Rails如何处理Date和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")


在这里钓鱼,但认为可能会有所帮助。

关于mysql - 如何在模型中存储日期?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35709223/

10-12 01:38
查看更多