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がfalseの場合)、ユーザーはロケーションページにリダイレクトされます。

ただし、ユーザーがログインしている場合は、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 に答える