实例化后将RoR / AR日期保持为对象

时间:2016-09-09 21:55:17

标签: ruby-on-rails activerecord

在个人项目中使用Rails 5。我有一个带有以下AR的用户模型 user schema

但是在尝试在我的一个控制器中添加一个返回和离开属性之后,我得到了一个回滚事务,它不会让我将数据保存到对象中。这是控制器的样子:

def find_flights
   @user = User.find(session[:user_id])
   @user.budget= params["user"]["budget"].to_f
   @user.departure = params["user"]["departure"]
   @user.return = params["user"]["return"]
   @user.save

...

此时的参数如下:

[1] pry(#<QuotesController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "user"=><ActionController::Parameters {"budget"=>"1200", "city"=>"Boston", "departure"=>"09/21/2016", "return"=>"10/08/2016"} permitted: false>, "commit"=>"Find Flights", "controller"=>"quotes", "action"=>"find_flights"} permitted: false>

即使在Rails控制台中,我也无法手动创建对象。注意:我不需要在实例化时离开/返回。

这是我的AR错误:

User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE "users"."name" =     ? AND ("users"."id" != ?) LIMIT ?  [["name", "Mark"], ["id", 1], ["LIMIT", 1]]

(0.1ms)回滚事务

这是用户模型

class User < ApplicationRecord
  has_secure_password
  has_many :itineraries
  has_many :quotes, through: :itineraries
  validates :name, presence: { message: "must exist" }, uniqueness: { message: "already exists"}
  validates :password, length: { minimum: 4 }
  validate :name_is_alpha_num?

  def name_is_alpha_num?
    if !self.name.match(/^[[:alnum:]]+$/)
    errors.add(:name, "may only be alphanumeric characters")
   end
  end

 def dates_valid?
   dates_not_nil && return_after_departure && dates_in_future
 end

 def return_after_departure
    self.return > self.departure
 end

 def dates_in_future
   (self.return.to_s > Time.now.strftime("%d/%m/%Y")) && (self.departure.to_s > Time.now.strftime("%d/%m/%Y"))
  end

 def dates_not_nil
    (self.return != nil) && (self.departure != nil)
 end

 def budget_valid?
   budget_not_zero && budget_positive && budget_a_number ? true : false
 end

 def budget_not_zero
    self.budget != 0 && self.budget != nil
  end

 def budget_positive
    self.budget > 0
 end

 def budget_a_number
    self.budget.is_a?(Integer) || self.budget.is_a?(Float)
 end

end

1 个答案:

答案 0 :(得分:0)

我看不出你的模型有什么问题,但现在我看到错误信息,它告诉你“用户存在”。

您正在尝试创建新用户,但该用户已存在。

您似乎在会话中存储了用户的ID,因此:

@user = User.find(session[:user_id])

我认为你想要更新这个用户,而不是保存这个用户。

阅读官方指南中的this

您正在调用“保存”,这将激活您的验证。您有一个验证,坚持该名称是唯一的。由于该用户已存在,因此无法使用“保存”。你需要做一个更新。