验证错误后如何保存select_day的值?我可以这样设置默认值:
f.select_day 1, {prefix: 'user[birthdate]'}
但是我不能这样从模型设置值:
f.select_day :birthdate, {prefix: 'user[birthdate]'}
错误:
ActionView::Template::Error (undefined method `day' for :birthdate:Symbol)
有可能还是我需要手动从参数获取并设置值?
模型:
class User
include ActiveModel::Model
include ActiveRecord::AttributeAssignment
attr_accessor :birthdate
def self.build(request, params = {})
u = self.new
u.assign_attributes(params)
u
end
end
控制器:
def new
@user = User.new
end
def create
@user = User.build(params[:user])
end
看法:
= form_for @user do |f|
f.select_day 1, {prefix: 'user[birthdate]'}
f.select_month 1, {prefix: 'user[birthdate]'}
f.select_year 1990, {prefix: 'user[birthdate]'}
如果您查看select_day(以及_month和_year)的文档,您会发现这些方法通常会为其第一个参数接受一个日期。它们也接受您选择的整数,但这是一个可替代的实现。
尽管如此,我建议进行一些小的更改。首先,我强烈考虑按照以下方式为User类设置默认的生日。
class User
attr_accessor :birthdate
def initialize()
@birthdate = Date.new 1990, 1, 1
super
end
...
end
然后,您的表单可以在新视图和编辑视图中使用User#birthdate访问器。
= form_for @user do |f|
= f.select_day @user.birthdate, prefix: 'user[birthdate]'
= f.select_month @user.birthdate, prefix: 'user[birthdate]'
= f.select_year @user.birthdate, prefix: 'user[birthdate]'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句