使用Ajax创建记录时,Rails不呈现布局

时间:2016-03-19 11:45:39

标签: ruby-on-rails ajax ruby-on-rails-4 nomethoderror

我的问题是在用ajax创建新记录后,我得到了NOMETHODERROR,我必须重新加载页面才能看到新记录。

我进入终端的错误。

  

呈现的time_entries / _time_entry.html.erb(3.4ms)已渲染   time_entries / create.js.erb(4.9ms)已完成500内部服务器错误   在41ms(ActiveRecord:4.4ms)

     

NoMethodError - nil的未定义方法`each':NilClass:
  app / views / time_entries / _time_entry.html.erb:1:in'_app_views_time_entries__time_entry_html_erb ___ 4086905375499854267_70174828432680'

我做错了什么?

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
部分

<% @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 创建新的时间条目后,我没有收到提醒。

alert("HALLO");

create.js.erb 正常

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

1 个答案:

答案 0 :(得分:0)

您没有在create方法中设置变量@time_entries_days,但在_time_entry.html.erb中需要它。

设定它,你应该好好去。