0

Ruby 散列很棒,而带有 DataMapper 的 Ruby 更棒……这是关于使用散列在 Ruby 中实例化 DateTime 属性。它与 DataMapper 有关。

我有一个模态,User它的生日存储为DateTime

class User
  include DataMapper::Resource

  property :id, Serial

  # Some other properties

  property :date_of_birth, DateTime

  property :gender, Enum[:male, :female, :other], {
    default: :other,
  }

  property :children, Integer
end

为了填充表单,我使用 HTML 之类的东西

<form method="post">

  <input type="text" name="user[name]" id="user-name">

  <!-- other fields -->

  <select name="{what to use for year?}" id="user-birth-year>
    <option value="1980">1980</option>
    <!-- other options -->
  </select>

  <select name="{what to use for month?}" id="user-birth-month>
    <option value="1">January</option>
    <!-- other options -->
  </select>

  <!-- Other fields -->
</form>

register.rb(路线)我做这样的事情......

  post '/auth/register' do
    user = User.new(params['user'])
    # Other stuff
  end

据我了解, has 用户必须与其字段类似。那么如何命名 date_of_birth 字段来实现这一点。

我的假设是使用这样的东西,但它似乎不起作用。

:date_of_birth = {
  :year => '2010'
  :month => '11'
  :date => '20'
}

这将由名称user[data_of_birth][year] user[date_of_birth][month]user[date_of_birth][date]选择列表给出。

4

1 回答 1

1

批量分配(做User.new(params['user']))不是很好的做法。无论如何,您需要以某种方式获得一个DateTimeTime对象。您可以根据需要命名字段,例如:

<select name="user[date_of_birth][year]" id="user-date_of_birth-year>
  <option value="1980">1980</option>
  <!-- other options -->
</select>

<select name="user[date_of_birth][month]" id="user-date_of_birth-month>
  <option value="1">January</option>
  <!-- other options -->
</select>

<select name="user[date_of_birth][day]" id="user-date_of_birth-day>
  <option value="1">1</option>
  <!-- other options -->
</select>

在你的控制器中:

dob = DateTime.new(
  params['user'][date_of_birth][year].to_i,
  params['user'][date_of_birth][month].to_i,
  params['user'][date_of_birth][day].to_i
)
User.new(:name => params['user']['name'], :date_of_birth => dob, ...)
于 2013-06-01T17:19:14.513 回答