Javascript Rails—使用AJAX时刷新页面而不是部分页面
可能重复:Javascript Rails—使用AJAX时刷新页面而不是部分页面,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,可能重复: 我有一个时间表,上面有事件的部分,所以你可以直接在时间表上对事件进行CRUD。我已经让delete部分正常工作,这样每次删除事件时delete partial和timeline都会刷新。但是,当创建新事件时,我无法使其工作。整个页面将刷新,而不是刷新表单和时间线 我想这和控制器有关?但我似乎无法修复它。任何帮助都将不胜感激,谢谢:0) 事件控制器: def create @event = Event.new(params[:event]) respond_to d
我有一个时间表,上面有事件的部分,所以你可以直接在时间表上对事件进行CRUD。我已经让delete部分正常工作,这样每次删除事件时delete partial和timeline都会刷新。但是,当创建新事件时,我无法使其工作。整个页面将刷新,而不是刷新表单和时间线 我想这和控制器有关?但我似乎无法修复它。任何帮助都将不胜感激,谢谢: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”,:locals=>{:event=>event.new(:timeline_id=>@timeline.id)},:remote=>true%>
时间线/新事件:
<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 %> <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 %>
添加一个事件
填写表格并单击“创建事件”将新事件添加到时间线。
禁止保存此事件:
当前_user.timeline.id%>
[:天、月、年],:开始\年=>1800%>
50 %>
“47x4”%>
“1”,:选中=>false%>
请在此处粘贴URL
50 %>
“47x3”%>
“btn btn成功”,远程=>true%>
事件/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" ) %>');
$('#new event').html('/timeline/new#event',:locals=>{:event=>event.new(:timeline#id=>@timeline.id)})%>');
$('.notice').html(“事件已成功创建。”;
$('notice')。show(300);
$(“#我的时间线框”).html(“/timeline/my#u timeline”)%>”;
$(“#显示时间线”).html(“/timeline/show#u timeline”)%>”;
(下面两行是刷新时间线本身)
更新:
以下是错误消息:
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)
2012年10月16日14:52:37+0100时,127.0.0.1的“/code>开始发布事件”
由EventsController处理#创建为JS
参数:{“utf8”=>“V”,“真实性令牌”=>“i8oiRI7rOLsfb5o45QCK0te/hAsWv
BMTqpxU9KrbmNA=“,”事件“=>{”时间线id“=>“1”,“开始日期(3i)”=>“16”,“开始日期”
ate(2i)“开始日期(1i)”=>“2012年”、“标题”=>、“文本”=>、“媒体”=>”
“,”标题“=>”},“提交”=>“创建事件”}
←[1m←[35米(0.0毫秒)←[0m开始交易
←[1m←[36mSQL(5.0ms)←[0m←[1在“事件”中插入(“标题”、“创建时间”)
信用、结束日期、标题、媒体、开始日期、文本、缩略图、ti
meline_id“,“更新的_at”)值(?,,,,,,,,,,,,,,?)←[0m[[”船长
在“,”],[“创建时间”,2012年10月16日星期二13:52:37 UTC+00:00],“信用”,无],
[“结束日期”,无],“标题”,“媒体”,“开始日期”,10月16日星期二
2012年,“文本”,“缩略图”,无”,“时间线id”,1”,“更新时间”,周二,
2012年10月16日13:52:37 UTC+00:00]]
←[1m←[35米(88.0毫秒)←[0m提交事务
渲染事件/create.js.erb(99.0ms)
在617毫秒内完成500个内部服务器错误
ActionView::Template::Error(为nil调用id,它将错误地为4--i
如果您确实想要nil的id,请使用object_id):
1:$(“#新事件”).html(“”/timelin)
es/new_event“,:locals=>{:event=>event.new(:timeline_id=>@timeline.id)})
%>');
2:$('.notice').html(“事件已成功创建。”);
3:$('notice')。show(300);
4:$(“#我的时间线框”).html(“”/t
imelines/my_timeline“%>”;
app/views/events/create.js.erb:1:in`\u app\u views\u events\u create\u js\u erb\u 8626901
43_20024148'
app/controllers/events_controller.rb:59:in'create'
呈现C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.4.rc1/lib/action\u d
ispatch/middleware/templates/rescues/_trace.erb(5.0ms)
呈现C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.4.rc1/lib/action\u d
ispatch/middleware/templates/rescues/_request_和_response.erb(2.0ms)
呈现C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.4.rc1/lib/action\u d
救援/布局中的ispatch/middleware/templates/rescues/template_error.erb(1
000.1ms)
您在提交按钮上有
:remote=>true
。这是不正确的。它应该在表单上:
<%= form_for(event, :remote => true) do |f| %>
true)do | f |%>
您尚未在控制器代码中初始化@timeline。因此,您将得到一个nil操作
因此,请输入您的创建代码:
@timeline = current_user.timeline
这会阻止页面现在刷新,但我现在在日志中发现一个错误。我已将其粘贴到问题中以使其更易于阅读。为什么id没有通过?谢谢。create.js.erb期望
@timeline
,但在控制器的create
方法中,您没有定义@timeline
。这很好,它是w现在开始工作,谢谢你的帮助。对后代来说:你为什么不使用timeline.events.new而不是摆弄手册id…可读性更好。我会看看如何做,谢谢你的提示。