1

我有一个链接,允许用户通过该链接在我的应用中声明虚构位置

<%= 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 为假),它会将他们重定向回位置页面。

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

我的问题是,如果设置:remote => true,它将启动 javascript,但不会启动 html,反之亦然,当我不设置:remote 时。

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

4

2 回答 2

2

是的,您可以使用 respond_to 块来执行此操作

 respond_to do |format|
    format.html
    format.js
  end

为了进行测试,请尝试禁用 JavaScript 并确保 HTML 路径有效

于 2012-07-21T23:19:49.290 回答
0

找到了适合我的解决方案。

我在 link_to 上设置了 :remote => true,它将一个 JS 请求发送到我使用的声明控制器

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

它完成与 redirect_to(@loc) 相同的事情

然后我就正常渲染了 claim.js 请求,即

render "claim"
于 2012-07-21T23:41:07.667 回答