【问题标题】:How to save date select fields in rails如何在rails中保存日期选择字段
【发布时间】:2015-03-24 17:05:39
【问题描述】:

如何保存日期选择字段?

说,我的观点是这样的:

 <%= f.date_select :dob, :start_year => Date.current.year, :end_year => 1920 %>

这将被转换为 HTML:

<select id="user_dob_1i" name="user[dob(1i)]"> ..for year..

<select id="user_dob_2i" name="user[dob(2i)]"> ..for month..

<select id="user_dob_3i" name="user[dob(3i)]"> ..for date..

上面的选择值当然会有一些选项。

现在,当我提交页面/表单时,参数将被传递为:

 Parameters: {"utf8"=>"✓", "user"=>{"dob(1i)"=>"2015", "dob(2i)"=>"3", "dob(3i)"=>"24"}, "commit"=>"Register"}

有意义吗?

在我的数据库中,我有一个名为“dob”的字段。问题是如何将这个字段保存在我的数据库中?

我正在使用 Rails 4.0.2 并使用 params permit 功能。我已经在我的控制器中添加了这个,

params.require(:user).permit("dob(1i)", "dob(2i)", "dob(3i)")

谷歌了一下,但我没有得出公平的结论..

【问题讨论】:

标签: mysql ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

只需从三个参数中创建一个日期:

@user.dob = Date.new(params['dob(1i)'].to_i,params['dob(2i)'].to_i,params['dob(3i)'].to_i)

@user.save

仅供参考,Rails 将接受一个实际字符串作为数据库中 DATE 类型的列的日期。因此,如果您使用返回字符串的日期选择器:

# if params[dob] = '2015-3-26' passed from your form
@user.dob = params[dob]
@user.save
  # in server console you'll see...
  # SQL (0.6ms)  UPDATE "users" SET "dob" = $1, "updated_at" = $2 WHERE "users"."id" = 193  [["dob", Thu, 26 Mar 2015],...

所以你可以这样做:

@user.dob = params.values.join'-'
  # =>'2015-3-26'
@user.save

当然,如果您在表单和permit 中添加任何其他参数,那么该参数将不再起作用。我建议您查看表单的日期选择器。让一切变得简单。

【讨论】:

  • Date::newparams 中将整数作为参数,您有一个字符串。
  • 表单不返回整数,从不。它总是字符串。
  • 这是一个很好的简单技巧。 +1。但应该是params['dob(1i)'].to_i 而不是引发错误undef method dob
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2020-09-30
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多