我在应用程序中使用活动模型进行付款流程,但我无法添加信用卡到期日期字段,因为它会引发如下错误未定义方法 `card_expiration_date(3i)='.
在我的模型中:
class CartServer
include ActiveModel::Validation
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :card_expiration_date
In view:
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]
)
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",
}
The ActiveModel::AttributeAssignment
我们从中获取的模块ActiveModel::Model
不知道如何将其转换为日期,因此我们需要引入功能更齐全的ActiveRecord
版本代替。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)