Rails 3 上跑的很欢的代码放到 Rails 4 上工作异常,初步推测是 Turbolinks 导致
是一个用 ajax 发评论的功能
view 代码
.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"
controller 代码
def create
@mission = Mission.find(params[:mission_id])
@comment = @mission.comments.build(comment_params)
@comment.user = current_user
@comment.save
end
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 %>
有两个问题,第一个是如果 controller 那样写什么效果也没有,最后面加上render layout: false
就可以了
第二个问题,直接打开这个页面发评论没有问题,但如果从其它页面通过 link 转过来点一次发布会同步发多次
我猜是 turbolinks 的问题,但没办法解决掉,不知道有没人遇到过,还是我代码里有低级错误?望大神帮忙