Rails 4:使用js重定向到另一个动作

时间:2015-03-25 14:48:18

标签: ruby-on-rails ajax ruby-on-rails-4

在我的应用程序中,我在show.html.erb页面上显示了操作,其中显示了该配方的配方和注释。我添加了ajax功能来添加注释。在控制器RecipeController我有add_new_comment动作。我可以从add_new_action重定向到显示来自format.js的动作吗?

显示操作:

def show
  @category = Category.where(id: @recipe.category_id).take
  @comments = @recipe.comments.recent.all.paginate(page: params[:page], per_page:15)
end

add_new_comment 操作:

def add_new_comment
  @recipe = Recipe.find(params[:recipe_id])
  if params[:comment].present?
    @comment = @recipe.comments.build
    @comment.comment = params[:comment]
    @comment.user = current_user
    respond_to do |format|
      if @comment.save
        format.html {redirect_to recipe_path(@recipe)}
        format.js {render action: 'show', :id => @recipe.id}
      end
    end
  end
end

我有 add_new_comment.js.erb

$('#comments').html("<%= j (render 'comments') %>");

4 个答案:

答案 0 :(得分:5)

您可以使用window.location.replace或window.location.href,如上所述here

只需将该行添加到add_new_comment.js.erb即可。

$('#comments').html("<%= j (render 'comments') %>");
window.location.replace("<%= recipe_path(@recipe) %>");

答案 1 :(得分:2)

因此,如果我理解得很好,您想在添加评论后重定向到食谱展示页面,以便您可以使用新评论更新页面?如果是这样,您可以在不重定向的情况下执行此操作,您只需将新创建的注释附加到食谱注释中即可。

add_new_comment.js.erb

$('#comments').append("<%= j (render @comment) %>");

如果您真的想重定向使用:

window.location.assign('your_url');

答案 2 :(得分:2)

请尝试此代码。

window.location.href = "<%= recipe_path(@recipe) %>"

答案 3 :(得分:0)

尝试通过以下方式呈现JS:

time                 change price price_1 symbol volume volume_1
----                 ------ ----- ------- ------ ------ --------
2019-05-09T10:00:00Z 3            1       ABCD          2000
2019-05-09T10:00:00Z 2            4       ABCD          2000
2019-05-09T10:00:00Z 4            4       ABCD          13000
2019-05-09T10:00:00Z 1            22      ABCD          450

希望它会有所帮助:)