2012-10-16 6 views
0

J'ai une chronologie avec les partiels d'événements dessus pour que vous puissiez CRUD événements directement sur la page de la ligne de temps. Je l'ai fonctionné de sorte que vous puissiez supprimer un événement, et les suppressions partielles de suppression avec le scénario, sans actualisation de la page.Rails - AJAX pour une nouvelle action/créer

Mais je ne peux pas le faire fonctionner pour un nouvel événement, ou pour en éditer un. S'il vous plaît quelqu'un peut-il m'aider à comprendre où je vais mal? Merci!

J'ai mis le code pour un nouvel événement ici, car je suis sûr que entre le nouveau et supprimer, je peux travailler sur la façon de trier l'édition.

délais/show:

<div id="show-timeline"> 
    <%= render :partial => "show_timeline" %> 
</div> 

    <div id="my-timeline-box"> 
     <%= render :partial => "my_timeline" %> 
    </div> 

<div id="new-event"> 
    <%= render :partial => "new_event", :locals => { :event => Event.new(:timeline_id=>@timeline.id) }, :remote => true %> 
</div> 

délais/_new_event.html.erb:

<%= form_for(event) do |f| %> 
    <% if event.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(event.errors.count, "error") %> prohibited this event from being saved:</h2> 

     <ul> 
     <% event.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <%=f.hidden_field 'timeline_id', :value => current_user.timeline.id %> 
    <div class="field"> 
    <%= f.label :date %><br /> 
    <%= f.date_select :start_date, :order => [:day, :month, :year], :start_year => 1800 %> 
    </div> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :headline, :size => 50 %> 
    </div> 
    <div class="field"> 
    <%= f.label :event_description %><br /> 
    <%= f.text_area :text, :size => "47x4" %> 
    </div> 
    <%= check_box_tag "blockCheck", :value => "1", :checked => false %> 
    <div class="field" id="media_box"> 
    <%= f.label :media %>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span>Please paste a URL here</span><br /> 
    <%= f.text_field :media, :size => 50 %> 
    </div> 
    <div class="field"> 
    <%= f.label :media_description %><br /> 
    <%= f.text_area :caption, :size => "47x3" %> 
    </div> 
    <div class="actions"> 
    <%= f.submit 'Create Event', :class => "btn btn-success" %> 
    </div> 
<% end %> 

événements/create.js.erb:

$('#new-event').html('<%= escape_javascript(render :partial => "/timelines/new_event", :locals => { :event => Event.new(:timeline_id=>@timeline.id) }) %>'); 
$('.notice').html("<p>Event was successfully created.</p>"); 
$('.notice').show(300); 
$('#my-timeline-box').html('<%= escape_javascript(render :partial => "/timelines/my_timeline") %>'); 
$('#show-timeline').html('<%= escape_javascript(render :partial => "/timelines/show_timeline") %>'); 

contrôleur événements:

def new 
    @event = Event.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @event } 
     format.js 
    end 
    end 

def create 
    @event = Event.new(params[:event]) 

    respond_to do |format| 
     if @event.save 
     format.html { redirect_to @event.timeline, notice: 'Event was successfully created.' } 
     format.json { render json: @event, status: :created, location: @event } 
     format.js 
     else 
     format.html { render action: "new" } 
     format.json { render json: @event.errors, status: :unprocessable_entity } 
     format.js 
     end 
    end 
    end 
+0

Pouvez-vous préciser ce que vous signifie par vous ne pouvez pas le faire fonctionner? Vous obtenez une erreur dans Rails ou dans le JavaScript? Avez-vous essayé le débogage pour vous assurer que les valeurs correctes sont passées du formulaire au contrôleur? –

+0

Désolé, je voulais dire qu'au lieu de rafraîchir les partiels comme je le veux, la page redirige toujours vers les timelines/1 - c'est-à-dire les rafraîchissements de la page à la place. – ecs

+0

Je suppose que cela signifie que c'est peut-être un problème avec le code dans le contrôleur? – ecs

Répondre

1

L'option :remote => true sur render :partial dans la chronologie/l'affichage n'est pas requise.

Au lieu de cela le form_for dans _new_event.html.erb devraient avoir les options: à distance (ce qui rend le formulaire soumettre via ajax) et: le format (cette demande la réponse en JavaScript), par exemple:

<%= form_for event, :remote => true, :format => :js do |f| %> 
Questions connexes