2011-08-15 2 views
0

J'ai un modèle 'Business' qui a beaucoup d'heures. Chaque enregistrement d'heure a une heure de début et une heure de fin, et il y a un enregistrement d'heure pour chaque jour de la semaine pour une entreprise donnée.Création du formulaire pour le modèle has_many associé

J'ai un formulaire où je ne fais que mettre à jour les heures pour une entreprise - rien d'autre sur l'entreprise. Dans ce cas, il est logique que le contrôleur des heures effectue la mise à jour. Mais je ne peux pas comprendre exactement comment régler le formulaire correctement.

Voici ce que j'ai jusqu'à présent, mais avec chaque heure envoyée en paramètre, j'ai besoin de savoir si c'est le start_time ou l'end_time et le jour auquel il est associé. Dans le select_tag, hour.day contient un entier 0-6 qui représente un jour de la semaine (du dimanche au samedi).

=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 

Comment puis-je configurer ceci? Merci!

+0

montrez votre schéma et vos modèles – fl00r

+0

OK, laissez-moi savoir si vous avez besoin de plus que ce que je viens d'ajouter. Merci. – 99miles

Répondre

0

fl00r, vous avez certainement m'a fait cette solution, vous me fait réaliser que je devrais utiliser le @business form_for, mais je avais juste besoin de changer le contrôleur et l'action:

-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 
0

Je ne sais pas haml du tout, mais je vais essayer

Vous devriez travailler avec elle par BuisnessController. Voici forme pour new et edit l'action:

=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 
+0

Mais form_for @business crée une forme pointant vers le contrôleur de gestion alors que je veux qu'il se rende au contrôleur des heures. – 99miles

Questions connexes