2012-10-16 46 views
0
時刷新頁面,而不是諧音

可能重複:
Rails - AJAX to for new/create action導軌 - 使用AJAX

我有了關於這事件泛音時間表,這樣你就可以CRUD事件直接時間表。我有刪除部分工作正常,以便刪除部分和時間線刷新每次事件被刪除。但是,當創建新事件時,我無法正常工作。整個頁面不刷新表單和時間表,而刷新整個頁面。

我假設這與控制器有關?但我似乎無法解決它。任何幫助將不勝感激,感謝:0)

事件控制器:

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 

時間表/顯示:

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

時間表/ _new_event:

<br /> 
<h2>Add an event</h2> 
<h4>Fill in the form and click 'Create Event' to add a new event to the timeline.</h4> 

<%= 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", :remote => true %> 
    </div> 
<% end %> 

事件/創建.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") %>'); 

(最下面兩行是刷新時間線iteself)。

UPDATE:

以下是錯誤消息:

Started POST "/events" for 127.0.0.1 at 2012-10-16 14:52:37 +0100 
Processing by EventsController#create as JS 
    Parameters: {"utf8"=>"V", "authenticity_token"=>"i8oiRI7rOLsfb5o45QCK0te/hAsWv 
BMTqpxU9KrbmNA=", "event"=>{"timeline_id"=>"1", "start_date(3i)"=>"16", "start_d 
ate(2i)"=>"10", "start_date(1i)"=>"2012", "headline"=>"", "text"=>"", "media"=>" 
", "caption"=>""}, "commit"=>"Create Event"} 
    ←[1m←[35m (0.0ms)←[0m begin transaction 
    ←[1m←[36mSQL (5.0ms)←[0m ←[1mINSERT INTO "events" ("caption", "created_at", " 
credit", "end_date", "headline", "media", "start_date", "text", "thumbnail", "ti 
meline_id", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)←[0m [["capti 
on", ""], ["created_at", Tue, 16 Oct 2012 13:52:37 UTC +00:00], ["credit", nil], 
["end_date", nil], ["headline", ""], ["media", ""], ["start_date", Tue, 16 Oct 
2012], ["text", ""], ["thumbnail", nil], ["timeline_id", 1], ["updated_at", Tue, 
16 Oct 2012 13:52:37 UTC +00:00]] 
    ←[1m←[35m (88.0ms)←[0m commit transaction 
    Rendered events/create.js.erb (99.0ms) 
Completed 500 Internal Server Error in 617ms 

ActionView::Template::Error (Called id for nil, which would mistakenly be 4 -- i 
f you really wanted the id of nil, use object_id): 
    1: $('#new-event').html('<%= escape_javascript(render :partial => "/timelin 
es/new_event", :locals => { :event => Event.new(:timeline_id=>@timeline.id) }) 
%>'); 
    2: $('.notice').html("<p>Event was successfully created.</p>"); 
    3: $('.notice').show(300); 
    4: $('#my-timeline-box').html('<%= escape_javascript(render :partial => "/t 
imelines/my_timeline") %>'); 
    app/views/events/create.js.erb:1:in `_app_views_events_create_js_erb___8626901 
43_20024148' 
    app/controllers/events_controller.rb:59:in `create' 


    Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.4.rc1/lib/action_d 
ispatch/middleware/templates/rescues/_trace.erb (5.0ms) 
    Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.4.rc1/lib/action_d 
ispatch/middleware/templates/rescues/_request_and_response.erb (2.0ms) 
    Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.4.rc1/lib/action_d 
ispatch/middleware/templates/rescues/template_error.erb within rescues/layout (1 
000.1ms) 

回答

1

你必須提交按鈕:remote => true。這是不正確的。它應該在表格上:

<%= form_for(event, :remote => true) do |f| %> 
+0

,從現在開始停止刷新頁面,但現在我在日誌中收到一個錯誤。我已將其粘貼到問題中以便於閱讀。爲什麼id沒有通過?謝謝。 – ecs

+0

create.js.erb期望'@ timeline',但是在你的控制器的'create'方法中,你沒有定義'@ timeline'。 – Mischa

+0

太棒了,它現在正在工作,謝謝你的幫助。 – ecs

1

您尚未初始化控制器代碼中的@timeline。因此你得到一個零的動作。

所以,把你創建的代碼:

@timeline = current_user.timeline 
+0

和爲後代:你爲什麼不使用timeline.events.new而不是擺弄手動ID ...更好的可讀性。 –

+0

我會看看這樣做,謝謝你的提示。 – ecs