3

我在我的应用程序中使用活动模型进行支付流程,但我无法添加信用卡到期日期字段,因为它会引发如下错误 未定义方法`card_expiration_date(3i)='

在我的模型中:

class CartServer

  include ActiveModel::Validation

  include ActiveModel::Conversion

  extend ActiveModel::Naming

  attr_accessor :card_expiration_date

鉴于:

f.date_select(
  :card_expiration_date,
  :add_month_numbers => false,
  :discard_day => true,
  :start_year => (Date.today.year-10),
  :end_year => (Date.today.year+10),
  :order=>[ :month,:year]
)
4

3 回答 3

3

这样的事情将在 Rails 6 中工作:

class CartServer
  include ActiveModel::Model
  include ActiveModel::Attributes
  include ActiveRecord::AttributeAssignment

  attribute :card_expiration_date, :date
end

这里有两件事很重要:

  • 声明attributewith 类型:date。在 ActiveRecord 模型中,此类型信息来自数据库模式,但由于我们使用的是 ActiveModel,我们需要显式声明它。

  • 包括ActiveRecord::AttributeAssignment获得对多部分参数分配的支持。表单中的参数将如下所示:

    {
      "card_expiration_date(1i)" => "2020",
      "card_expiration_date(2i)" => "12",
      "card_expiration_date(3i)" => "31",
    }
    

    ActiveModel::AttributeAssignment我们从中获取的模块ActiveModel::Model不知道如何将其转换为日期,因此我们需要引入功能更齐全的ActiveRecord版本。

于 2020-06-10T16:31:43.527 回答
-2

如何通过 Rails date_select 设置 attr_accessor 日期并让 Rails 自动处理多属性:https ://gist.github.com/paulsturgess/5500858

于 2015-03-27T09:48:38.820 回答
-2

属性:card_expiration_date,Type::Date.new

于 2017-04-28T03:33:54.077 回答