Rails控制器动作可以处理html和javascript请求吗?

时间:2012-07-21 23:12:27

标签: javascript ruby-on-rails ajax

我有一个链接,允许用户通过链接

在我的应用中声明虚构位置
<%= link_to("Claim this location!", loc_claim_path(@loc.id), :id => "loc_claim") %>

它通过我的索赔控制器路由请求,如:

def claim

    @loc = Location.find(params[:loc_id])

    if !@user
        flash[:notice] = "You need to be logged in to claim a location!"
        redirect_to(@loc)
    else
        flash[:notice] = "Location claimed!"
        render("claim.js")
    end

end

如果用户未登录(即@user为false),则会将用户重定向回位置页面。

但是,如果用户已登录,则需要触发javascript claim.js,然后在完成后重定向回位置页面。

我的问题是,如果设置:remote =&gt;是的,它会启动javascript,但不会启动html,反之亦然,当我没有设置:remote。

我有办法让两全其美吗?或者,除此之外,有没有更好的方法来设置它?

2 个答案:

答案 0 :(得分:2)

是的,您可以使用respond_to块

执行此操作
 respond_to do |format|
    format.html
    format.js
  end

要进行测试,请尝试禁用JavaScript并确保HTML路径正常工作

答案 1 :(得分:0)

找到适合我的解决方案。

我设置:remote =&gt;在link_to上为true,它向声明控制器发送JS请求,我使用了

render js: "window.location.pathname='/locations/#{@location.id}'"

其中与redirect_to(@loc)

完成相同的操作

然后我正常地提出了claim.js请求,即

render "claim"