通过嵌套表单通过simple_form在模型中创建多个条目

时间:2015-10-26 17:58:07

标签: ruby-on-rails simple-form nested-forms

当用户创建空缺时,我希望他们能够保存1个日期范围或多个单独日期。

所以我有2个模型,VacancyVacancyschedule

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"}

从我可以看到的是,它们传递的变量非常不同且不完整(并非所有日期都通过)。

有没有人对此问题有任何经验?我如何抓住这些元素或如何阻止它们以这种格式推送?

1 个答案:

答案 0 :(得分:1)

Eeeehhh,我讨厌嵌套表格。当我不得不处理它们时,我总是回到基础。查看这些精美的railscast。我认为第二个更好地针对你的问题,但第一个有助于理解它:

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。