为关联的has_many模型创建表单

时间:2011-08-15 16:43:24

标签: ruby-on-rails ruby-on-rails-3

我有一个'商业'模式,其中包含'小时'。每小时记录都有一个start_time和一个end_time, 并且对于特定企业,每周的每一天都有一个小时记录。

我有一个表单,我只更新业务时间 - 没有其他关于业务的内容。在这种情况下,让Hours控制器进行更新是有意义的。但我无法弄清楚如何正确设置表单。

这是我到目前为止所拥有的,但每个小时作为参数发送,我需要知道它是start_time还是end_time以及它与之相关的那一天。在select_tag中,hour.day包含一个0-6的整数,表示星期几(星期日到星期六)。

=form_tag({:controller => 'hours', :action => "update_multiple"}, :remote => :true) do |f|

  -business.hours.each do |hour|
    =fields_for hour do |hour_fields|
      =select_tag 'hour[days_nums][#{hour.day}]', options_for_select(possible_hours, :start_time)

class Business < ActiveRecord::Base

  has_many :hours, :as => :hourable
  accepts_nested_attributes_for :hours

end

class Hour < ActiveRecord::Base

  belongs_to :hourable, :polymorphic => true

end


create_table "hours", :force => true do |t|
  t.integer  "hourable_id"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "hourable_type"
  t.integer  "day"
  t.time     "start_time"
  t.time     "stop_time"
end

我该如何设置? 谢谢!

2 个答案:

答案 0 :(得分:0)

我根本不认识haml,但我会尝试

您应该通过BuisnessController使用它。以下是newedit操作的表单:

=form_for @buisness do |f|
  =f.fields_for :hours do |hour|
    =hour.select :day, (0..6)
    =hour.select :start_time, [6,7,8] # some start times
    =hour.select :stop_time, [9,10,11] # some stop times

答案 1 :(得分:0)

fl00r,你肯定让我接受了这个解决方案,你让我意识到我应该使用form_for @business,但是我只需要改变控制器和动作:

-form_for @business, :url => {:controller => 'hours', :action => "update_multiple"}, :remote => :true do |f|
  =f.fields_for :hours do |hour|
    =hour.select :day, (0..6)
    =hour.select :start_time, [6,7,8] # some start times
    =hour.select :stop_time, [9,10,11] # some stop times