我在我的应用程序中使用事件模型进行付款流程,但我无法添加信用卡到期日期字段,因为它会抛出如下错误 未定义方法`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]
)
最佳答案
像这样的东西将在 Rails 6 中工作:
class CartServer
include ActiveModel::Model
include ActiveModel::Attributes
include ActiveRecord::AttributeAssignment
attribute :card_expiration_date, :date
end
这里有两件事很重要:
使用
:date
类型声明属性
。在 ActiveRecord 模型中,此类型信息来自数据库架构,但由于我们使用 ActiveModel,因此需要显式声明它。包括
ActiveRecord::AttributeAssignment
以获取对多部分参数分配的支持。表单中的参数将如下所示:{ "card_expiration_date(1i)" => "2020", "card_expiration_date(2i)" => "12", "card_expiration_date(3i)" => "31", }
我们从
ActiveModel::Model
获得的ActiveModel::AttributeAssignment
模块不知道如何将其转换为日期,因此我们需要引入更多信息而是功能齐全的ActiveRecord
版本。
关于ruby-on-rails - 如何使用事件模型为 date_select 下拉菜单定义虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11947040/