2010-09-24 3 views
0

Ok les gars, donc je fais un planificateur.Aide pour l'association des rails

J'ai donc deux tables à ce jour, Affiche avec "title: string" et "description: text" et j'ai aussi ShowTime; avec "show_id: integer", "day: string" et "show_time: time".

J'ai fait has_many et belongs_to, je ne sais pas honnêtement où aller à partir de là,

Je veux un utilisateur de pouvoir ajouter les temps lors de la création d'un nouveau spectacle. Qu'est ce que je ferais? Je regardais quelques associations de documentation rails, semble que je rendrais quelque chose comme,

@showtime = @shows.showtimes.create(:show_id => show.id, :day => DAY, :show_time => TIME) 

Avis Je viens de mettre jour et l'heure, parce que je aussi ne sais vraiment pas comment je vais chercher ces données.

Répondre

2

Cela dépend vraiment de votre interface. Mais pour plus de simplicité, supposons que vous avez fourni deux cases de sélection pour le jour et l'heure, et que vous devez ajouter ShowTime un par un.

Et supposons que vous avez des ressources de repos:

map.resources :shows do |show| 
    show.resources :show_times 
end 

La forme: (donné un objet @show créé déjà)

<% form_for @show_time, :url => show_show_time_path(@show) do |form| %> 
    <%= form.label :day %>: <%= form.select :day, [["Mon", "mon"], ["Tue", "tue"]], {} %> 
    <%= form.label :show_time %>: <%= form.select :show_time, [["Slot 1", "09:00"]], {} %> 
<% end %> 

Vous devez fournir votre meilleure façon de générer les day & show_time tableaux . Ils sont dans la structure suivante:

[["Text", "value"], ["Text", "value"]]

qui va générer quelque chose comme:

<option value="value">Text</option>

Une fois le formulaire soumis, dans votre action créer:

def create 
    @show = Show.find params[:show_id] # this params[:show_id] is from the rest resource's path 
    @show_time = @show.show_times.build(params[:show_time]) # this params[:show_time] is from the form you submitted 

    if @show_time.save 
    flash[:notice] = "Success" 
    redirect_to show_show_time_path(@show, @show_time) 
    else 
    flash[:notice] = "Failed" 
    render :action => "new" 
    end 
end 
+0

Hey Peter , Merci pour ton aide. Je suppose que je dois aller lire d'autres tutoriels, parce que je ne comprends pas la moitié des choses que vous avez dites. Je n'ai pas de ressources de repos, Jusqu'ici, je n'ai fait que le show & showtime échafaudages, la migration, puis ajouté le "has_many" et "belongs_to". – Rickmasta

+0

Si vous ouvrez votre 'routes.rb', vous devriez voir deux ressources' map.resources: shows' et 'map.resources: showtimes'. Scaffolds utilise également des ressources reposantes. Mais je crains que cela n'ait pas généré de ressources imbriquées pour vous. Est-ce le cas? – PeterWong