我在我的应用程序中使用活动模型进行付款处理,但我无法为信用卡到期日期添加字段,因为它会抛出错误,如下所示 未定义的方法`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]
答案 0 :(得分:0)
如何通过Rails date_select设置attr_accessor日期并让Rails自动处理多属性:https://gist.github.com/paulsturgess/5500858
答案 1 :(得分:0)
属性:card_expiration_date,Type :: Date.new
答案 2 :(得分:0)
类似的事情将在Rails 6中起作用:
class CartServer
include ActiveModel::Model
include ActiveModel::Attributes
include ActiveRecord::AttributeAssignment
attribute :card_expiration_date, :date
end
这里有两点很重要:
以类型attribute
声明: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
版本。