在rails中渲染js.erb

时间:2016-08-24 01:45:16

标签: javascript ruby-on-rails ruby ruby-on-rails-3

我想试试我的js.erb是否有效?

这里我的帖子/索引要触发

 <%= link_to "Like", {:controller => 'post', :id => post , :action =>'like'}, class: "btn btn-danger btn-xs", remote: true %>

我的帖子控制器

def like
@user = current_user
@post.liked_by(@user)
redirect_to posts_path
respond_to do |format|
  format.html {redirect_to posts_path}
  format.js { render :action => 'stablelike' }

end
end

这是我的js.erb来测试

alert("working");

这是我的错误:当我检查我的Chrome时

AbstractController :: DoubleRenderError at / post / like / 85

  

在此操作中多次调用渲染和/或重定向。请注意,您只能调用渲染或重定向,每次操作最多一次。另请注意,重定向和呈现都不会终止执行操作,因此如果要在重定向后退出操作,则需要执行类似“redirect_to(...)并返回”的操作。

app / controllers / posts_controller.rb,第83行

 ``` ruby
 78       @user = current_user
 79       @post.liked_by(@user)
 80       redirect_to posts_path
 81       respond_to do |format|
 82         format.html {redirect_to posts_path}
  

83 format.js {render:action =&gt; '稳定''}        84个
       85结束        86结束        87

1 个答案:

答案 0 :(得分:3)

在控制器操作中,renderredirect_to都不会停止执行操作。这就是你获得DoubleRenderError的原因。删除第一个redirect_to,一切都应该没问题。

def like
  @user = current_user
  @post.liked_by(@user) # I am unsure what you're trying to accomplish here
  respond_to do |format|
    format.html { redirect_to posts_path }
    format.js { render :stablelike }
  end
end

如果这不起作用,可能您尚未设置stablelike操作来响应xhr请求。你可以通过

来做到这一点
def stablelike
  respond_to  do |format|
    # other formats
    format.js # by default looks for `stablelike.js.erb`
  end
end