当用户创建空缺时,我希望他们能够保存1个日期范围或多个单独日期。
所以我有2个模型,Vacancy
和Vacancyschedule
。
Vacancyschedule包含vacancy_id start_date end_date start_hour end_hour (to save a range)
,当它是多个单独的日期时,我只想将end_date
留空并有多个条目,并通过我的vacancy_id
合并。
这是我的观点中的代码:
... other code to ask for vacancy params, nothing special, nothing broken ...
#Code to create entry in vacancyschedule
<%= t.simple_fields_for :vacancyschedule do |p| %>
<%= p.input :start_date, :as => :date_picker, :label => false%>
<%= p.input :start_hour, as: :time, default: Time.parse('09:00')%>
<%= p.input :end_hour, as: :time, default: Time.parse('17:00')%>
<% end %>
然后我有一些javascript,当用户想要添加第二个单独的日期时,会添加另一个精确副本中的一个。
现在我的问题:
传递它们的格式非常奇怪。如你所见,我要求:start_date,:start_hour和:end hour,这就是我得到的:
{"name"=>"", "street"=>"", "description"=>"", "skill_id"=>"",
"jobtype_id"=>"", "wage"=>"", "vacancyschedule"=>
{"start_date"=>"27/10/15", "end_date"=>"", "start_hour"=>"",
"end_hour"=>"", "start_hour(1i)"=>"2015", "start_hour(2i)"=>"10",
"start_hour(3i)"=>"26", "start_hour(4i)"=>"21",
"start_hour(5i)"=>"00", "end_hour(1i)"=>"2015", "end_hour(2i)"=>"10",
"end_hour(3i)"=>"26", "end_hour(4i)"=>"17", "end_hour(5i)"=>"00"},
"vacancyscheduele"=>{"start_date"=>"", "start_hour(1i)"=>"2015",
"start_hour(2i)"=>"10", "start_hour(3i)"=>"26", "start_hour(4i)"=>"09",
"start_hour(5i)"=>"00", "end_hour(1i)"=>"2015", "end_hour(2i)"=>"10",
"end_hour(3i)"=>"26", "end_hour(4i)"=>"17", "end_hour(5i)"=>"00"},
"tag_list"=>""}, "radio"=>"on", "commit"=>"Create Vacancy",
"controller"=>"vacancies", "action"=>"create", "employer_id"=>"2"}
从我可以看到的是,它们传递的变量非常不同且不完整(并非所有日期都通过)。
有没有人对此问题有任何经验?我如何抓住这些元素或如何阻止它们以这种格式推送?
答案 0 :(得分:1)
http://railscasts.com/episodes/196-nested-model-form-part-1
http://railscasts.com/episodes/197-nested-model-form-part-2
在一天结束时,你需要知道你的html产生了什么,并确保它是后端Rails所期望的。此外,您必须在加载时考虑嵌套对象并节省时间。就Rails而言,你的HTML就不会产生可解析的对象。另一方面,很难处理Rails的垃圾日期/时间选择器。我通常喜欢投入能够产生更好日期选择器的东西。生成一个易于映射到数据库字段的字符串。如果你使用bootstrap,我会使用bootstrap datepicker gem。