我使用一些在Rails 3上运行良好但在Rails 4上却不行的代码,我猜测是由Turbolinks引起的,但我对它了解不多,无法深入挖掘解决我的问题,以下是代码:
视图:
控制器:
我有两个问题关于这段代码,第一个问题是:像这样的控制器代码不起作用,js代码被传输到客户端但没有运行,我必须在该操作底部添加
第二个问题是:当我第一次访问此页面并重新加载页面时,评论功能可以正常工作,但是如果我从其他页面点击链接跳转到此页面,提交此表单将导致ajax请求调用多次,将创建多个评论。
谢谢。
视图:
a/v/m/_new_comment.slim
.new-comment
- if current_user
= render "editor_toolbar"
= form_for(Comment.new, :remote => true, :url => mission_comments_path(@mission)) do |f|
= f.text_area :content, :class => "span10",
:rows => "4", :tabindex => "1"
#preview.hidden
= "Loading..."
= f.submit t("missions.submit_comment"),
"data-disable-with" => t("missions.submitting"),
:class => "btn btn-primary", :tabindex => "2"
- else
= render "need_login_to_comment"
控制器:
def create
@mission = Mission.find(params[:mission_id])
@comment = @mission.comments.build(comment_params)
@comment.user = current_user
if @comment.save
@mission.events.create(user: current_user, action: "comment")
render layout: false
end
and js:
<% if @comment.errors.any? %>
$(".new-comment textarea").focus();
<% else %>
$(".comments").append("<%= j (render @comment, :index => @mission.comments.count-1) %>");
$(".new-comment #preview").addClass("hidden").html('');
$(".new-comment textarea").css("display", "block").val('');
$(".editor-toolbar .preview").removeClass("active");
$(".editor-toolbar .edit").addClass("active");
<% end %>
我有两个问题关于这段代码,第一个问题是:像这样的控制器代码不起作用,js代码被传输到客户端但没有运行,我必须在该操作底部添加
render layout: false
,在Rails 3中不需要这样做。第二个问题是:当我第一次访问此页面并重新加载页面时,评论功能可以正常工作,但是如果我从其他页面点击链接跳转到此页面,提交此表单将导致ajax请求调用多次,将创建多个评论。
谢谢。