2016-03-19 10 views
0

Mein Problem ist, nachdem ich einen neuen Datensatz mit AJAX erstellen Ich bekomme einen NOMETHODERROR und ich muss die Seite neu laden, um den neuen Datensatz zu sehen.Schienen nicht Layout rendern, wenn Datensatz mit Ajax erstellen

Der Fehler bekomme ich in Terminal.

Rendered time_entries/_time_entry.html.erb (3.4ms) Rendered time_entries/create.js.erb (4.9ms) Abgeschlossene 500 Internal Server Error in 41ms (Active: 4.4ms)

NoMethodError - nicht definierte Methode `jeder‘ für nil: NilClass:
app/views/time_entries/_time_entry.html.erb: 1: in '_app_views_time_entries__time_entry_html_erb___4086905375499854267_70174828432680'

Was ich falsch gemacht?

time_entries_controller.erb

class TimeEntriesController < ApplicationController 

    ... 

    respond_to :html, :js 

    def index 
    @time_entries = current_user.time_entries.all.order("date DESC") 
    @time_entries_days = @time_entries.group_by{ |t| t.date.beginning_of_day } 
    respond_with(@time_entry) 
    end 

    def create 
    @time_entry = TimeEntry.new(timeentry_params) 
    @time_entry.user_id = current_user.id 

    respond_to do |format| 
     if @time_entry.save 
     format.html { redirect_to @time_entry, notice: 'Arbeitszeit wurde eingetragen' } 
     format.json { render :show, status: :created, location: @time_entry } 
     format.js 
     else 
     format.html { render :new } 
     format.json { render json: @time_entry.errors, status: :unprocessable_entity } 
     format.js 
     end 
    end 

    end 

    ... 

_time_entry.html.erb
die partielle

<% @time_entries_days.each do |day, time_entries| %> 
    <% if day.today? %> 
     <div class="column-12 list-group">Today, <%= l day, format: :dm %></div> 
    <% else %> 
     <div class="column-12 list-group"><%= l day, format: :dm %></div> 
    <% end %> 

    <ul class="lists"> 
     <% time_entries.each do |time_entry| %> 
     <li class="list-item" id="time_entry_<%= time_entry.id %>"> 
      <div class="list-item__content"> 
      <h3 class="list-item__title"> 
       <%= link_to time_entry.category.name, time_entry %> 
       <span><%= l time_entry.start_time, format: :hm %></span> - <span><%= l time_entry.end_time, format: :hm %></span> 
      </h3> 
      <p><%= time_entry.note %></p> 
      </div> 
      <span class="list-item__label"><%= time_entry.hours %>h</span> 
     </li> 
     <% end %> 
    </ul> 
<% end %> 

index.html.erb

<% if can? :create, TimeEntry %> 
     <%= link_to 'Add new Time Entry', new_time_entry_path, remote: true, class: 'btn btn-primary', :data => { :'popup-open' => 'popup-1' } %> 
    <% end %> 

    ... 

    <div class="row" id="container_time_entries"> 
    <%= render "time_entry" %> 
    </div> 

create.js.erb zum Testen
Ich erhalte keine Warnung, nachdem ich einen neuen Zeiteintrag erstellt habe.

alert("HALLO"); 

create.js.erb normalen

$('.modal-bg').hide(); 
$('.popup').fadeOut(350); 
$('#container_time_entries').html("<%= j(render 'time_entry') %>"); 

Antwort

0

Sie setzen nicht die Variable @time_entries_days in Ihrer Methode erstellen, aber Sie müssen es in Ihrem _time_entry.html.erb.

Setzen Sie es und Sie sollten gut gehen.

+0

Aber jetzt kann ich den neuen Datensatz sehen, ohne die Seite zu aktualisieren, nachdem ich einen anderen Datensatz erstellt habe. ich –

Verwandte Themen