我的模型中有一个字段:birth_time,我正在尝试从 3 个表单字段构建它,但我的时间很长。我尝试了两种不同的方法。这是我在第一种方法中的表单片段:
<input type="text" class="span1" name="birth_time_hour" id="birth_time_hour" placeholder="hour">
<input type="text" class="span1" name="birth_time_minute" id="birth_time_minute" placeholder="minute">
<select name="birth_time_meridiem" id="birth_time_meridiem" class="span1">
<option value="am">AM</option>
<option value="pm">PM</option>
</select>
我的模型:
attr_accessible :birth_time
我想要在我的控制器中做的是获取这三个表单值,创建一个 Time 对象,并在保存之前将其设置为 Pick.birth_time。我在对参数 [“birth_time_hour”] 进行任何算术运算时遇到问题。如果是 PM,我想在创建 Time 对象之前添加 12。
params["birth_time_hour"] + 12
导致can't convert Fixnum into String
params["birth_time_hour"].to_i
结果exception class/object expected
。
我需要先从表单值创建一个对象吗?
我的第二种方法是将 attr_accessible 值添加到模型中,即使它们实际上并未存储在数据库中。
attr_accessible :birth_time_hour, :birth_time_minute, :birth_time_meridien, :birth_time
然后在我的表单中(使用 simple_form):
<%= f.input :birth_time, :label => "Birth time:", :as => :tel, :input_html => { :class => 'span2' }, :placeholder => 'hour' %>
但这只是在尝试渲染表单时爆炸:
undefined method `birth_time_hour' for #<Pick:0x0000010657c248>
我不太确定为什么我不能有一个 attr_accessible 。我之前将它与密码字段一起使用,它只存在于表单上,而不存在于数据库中。
编辑:当我将 attr_accessible 和 attr_accessor 用于birth_time_hour 时,它似乎效果更好。它至少可以构建表单,但我仍然不认为它是控制器中 Pick 对象的一部分。我对 attr_accessor 及其用途知之甚少,我很确定。
关于如何解决看似简单的问题的任何想法?我已经阅读了其他建议将所有 3 个值存储在数据库中的 SO 线程,这似乎很愚蠢,因为我都知道了。我真的希望不是这样。