我有一个链接,允许用户通过链接
在我的应用中声明虚构位置<%= 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。
我有办法让两全其美吗?或者,除此之外,有没有更好的方法来设置它?
答案 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"