2012-11-05 7 views
7

Desidero visualizzare un modulo "Modifica" nella vista "Mostra" di un oggetto padre.Come eseguire il rendering di un modulo "Modifica" parziale nella pagina "Mostra" di un altro modello in Rails

Il mio modello è simile a questo: Un viaggio ha molti giorni con molte attività. Il viaggio accetta attributi nidificati per giorni. Giorni accetta attributi nidificati per attività.

Quando sono nella visualizzazione "Mostra" per un viaggio, come si esegue il rendering di un modulo "Modifica" parziale per una "Attività"?

So che ho bisogno di specificare in qualche modo al modulo di modifica parziale quale ID attività che voglio modificare ma non sono sicuro di come passare quelle informazioni dalla vista "Mostra" di un "Trip".

<% @trip.days.each do |day| %> 
    <div id="daydiv_<%= day.id %>"> 
     <b><%= day.summary %></b> 
     <%= content_tag_for :ol, day do %> 
      <% day.activities.each do |activity| %> 
       <li id="activity_<%= activity.id %>"><%= link_to activity.address, edit_activity_path(activity) %></li> 
      <% end %> 
     <% end %> 
    </div> 
    <% end %> 

<div id="activity_form"> 
    <%= render :partial => "/activities/form", :activity => @activity %> 
</div> 

miei/attività/form sguardi parziali come questo:

<%= form_for(@activity) do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+0

Su una nota indipendenti, vieni alla darkside..have uno sguardo vedere in sottile: https://gist.github.com/4021515 –

risposta

5

Questo è quello che ho finito per fare e funziona.

Nel mio show.html.erb per il mio "Trip". .

show.html.erb

<div id="activity_form"> 
<h2>Activities</h2> 
</div> 

puntano a "Modifica' un'attività notare la: a distanza => true che racconta il controller Rails che questa sarà una richiesta AJAX in modo da rendere modifica. js.erb

<%= link_to activity.location[0, 20], edit_day_activity_path(day, activity), :class=>"btn btn-info fixedwidthbtn", method: :get, :remote => true 

_form.html.erb Questa forma parziale è sotto la directory Attività View (../views/activities/_form.html.erb).

<%= form_for([@day, @activity], :remote => true) do |f| %> 
<fieldset> 
    <%= f.label :title, "Activity" %> 
    <%= f.text_field :title, :rows => 1 %> 
</fieldset> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
</form> 
    <%= link_to 'Delete', [@day, @activity], method: :delete, data: { confirm: 'Are you sure?' } %> 
<% end %> 

edit.js.erb Si tratta di un file con le attività vedi elenco (../views/activities/edit.js.erb). Dice di afferrare l'elemento DOM con ID di "activity_form" e rendere la "forma" parziale

$("#activity_form").html("<%= escape_javascript(render(:partial => "form"))%>"); 

update.js.erb ho inserito questa JavaScript dopo aver colpito aggiornamento sul modulo Modifica rendere un aggiornamento parziale la lista delle attività. In modo che non devo ricaricare la pagina per vedere un aggiornamento.

$("#activities_list").html("<%= escape_javascript(render(:partial => "/trips/activities")) %>"); 

routes.rb Questo è come mi nido miei percorsi. Solo facendo 1 livello seguendo le migliori pratiche.

resources :trips do 
    resources :days 
end 

resources :days do 
    resources :activities 
end 
+0

ho affrontato molto con CRUD ajax. La tua risposta mi risolve 2 problemi. Rendering di un modulo con ajax e rendering di un modulo per il modello annidato. Molte grazie. – Dieglock

Problemi correlati