【问题标题】:Validations showing errors even though values are being posted即使正在发布值,验证也会显示错误
【发布时间】:2013-01-25 02:45:23
【问题描述】:

我有以下模型验证

  validates_presence_of :enddate
  validates_presence_of :startdate

这是发布的内容

Parameters: {"utf8"=>"✓", "authenticity_token"=>"QczhHQoDU7a0/WKnUnLlzQ9Aob/NQOj1naiwfOYIW1c=", 
"billsanddeposit"=>{"name"=>"Test Bill Item", 
"itemcategory_id"=>"2", "repeatsevery"=>"2", "startdate"=>"01/24/2013", "enddate"=>"01/31/2013", 
"deposit"=>"0", "amount"=>"100"}, "commit"=>"Create Billsanddeposit"}

这些是出现的错误

Enddate can't be blank
Startdate can't be blank

这些是数据库中的日期时间字段,当脚手架最初创建表单时,它具有 date_select。我将其更改为带有 jquery datepicker 的 text_field,现在即使我可以看到上面显示的值正在发布,但我得到了上面的错误,表明它们没有被看到。

这是整个模型

class Billsanddeposit < ActiveRecord::Base
  attr_accessible :amount, :bankaccount_id, :deposit, :enddate, :itemcategory_id, :name, :repeatsevery, :repeattype_id, :startdate

  validates_presence_of :amount
  validates_presence_of :bankaccount_id
  validates_presence_of :itemcategory_id
  validates_presence_of :enddate
  validates_presence_of :name
  validates_presence_of :repeatsevery
  validates_presence_of :repeattype_id
  validates_presence_of :startdate


  belongs_to  :bankaccount
  belongs_to  :repeattype
  belongs_to  :itemcategory
  has_many    :ledgeritems
end

到目前为止,我所做的只是添加关系和验证。

这是控制器,几乎完全默认

  def create
    @billsanddeposit = Billsanddeposit.new(params[:billsanddeposit])

    respond_to do |format|
      if @billsanddeposit.save
        @billsanddeposits = Billsanddeposit.joins(:bankaccount).where("bankaccounts.user_id = ?", current_user.id)
        @billsanddeposit = Billsanddeposit.new

        format.html { redirect_to @billsanddeposit, :notice => 'Billsanddeposit was successfully created.' }
        format.json { render :json => @billsanddeposit, :status => :created, :location => @billsanddeposit }
      else
        @billsanddeposits = Billsanddeposit.joins(:bankaccount).where("bankaccounts.user_id = ?", current_user.id)

        format.html { render :action => "index" }
        format.json { render :json => @billsanddeposit.errors, :status => :unprocessable_entity }
      end
    end
  end

【问题讨论】:

  • 尝试用DateTime.parse(date)解析日期
  • 控制器是默认脚手架吗?
  • 你有attr_accessible:enddate:startdate吗?
  • 我已经用模型和控制器更新了问题。

标签: ruby-on-rails ruby-on-rails-3 validation


【解决方案1】:

我已发表评论,但这是我的回应。

如果你想保存在你的数据库enddatestartdate你必须添加attr_accessible

attr_accessible :enddate, :startdate

如果你能在你的action上收到这些参数created可能是日期格式有问题。

您还应确保模型上的这些属性是日期、时间...等类型。

问候!

【讨论】:

  • 我已经用我的完整模型和控制器方法更新了这个问题。如您所见,一切都像您所说的那样设置好了。我什至没有验证格式,只是它在那里。当我创建它时,我确实将 startdate 和 enddate 设置为 datetime 属性。
  • 你能在你的控制器上写你的创建动作吗? logger.info params[:billsanddeposit][:startdate]logger.info params[:billsanddeposit][:startdate]。在您可以查看您的日志以查看具有此参数的值并粘贴到此处后,请
【解决方案2】:

我从这个博客中发现了问题:http://library.edgecase.com/american-date-parsing#tldr

这是因为我使用的是美国日期格式。通过包含引用的 gem,它再次开始工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2011-02-11
    • 2017-10-18
    • 2015-12-15
    • 2018-08-14
    相关资源
    最近更新 更多