0

Ruby on Railsを初めて使用し、最初のajax呼び出しを機能させようとしています。ajax呼び出しを行っていますが、常に#indexアクションを呼び出し、URLパラメーターを無視しているようです。コードは次のとおりです。

class UserController < ApplicationController
def flag
    logger.debug "in flag user"
    respond_to do |format|
      format.js { render :layout=>false }
    end
  end
end

私のroutes.dbで:

resources :users do
    member do
      post 'flag'
      get 'flag'
    end
  end

そして、私の見解では、次のようなリンクを作成します。

<%= link_to "Flag User", :url => flag_user_path(user.id), :method => :get, :remote => true %>

HTMLソースは次のとおりです。

<a href="/users?method=get&amp;url=%2Fusers%2F1%2Fflag" data-remote="true">Flag User</a>

レーキルートはこれを生成します:

flag_user  POST   /users/:id/flag(.:format)   users#flag
           GET    /users/:id/flag(.:format)   users#flag

リンクをクリックするたびに、user#indexメソッドが常に実行されます。user#flagメソッドを実行するにはどうすればよいですか?

4

3 に答える 3

1

問題は、ルートをどのように定義するかにあります。このようにする必要があります、

resources :users do
  post 'flag'
  get 'flag', on: :member
end

詳細については、レールガイドでルーティングを確認してください。

于 2012-11-26T15:20:46.400 に答える
1

問題は :url 記号でした。私が変更され:

<%= link_to "Flag User", :url => flag_user_path(user.id), :method => :get, :remote => true %>

に:

<%= link_to "Flag User", flag_user_path(user.id), :method => :get, :remote => true %>

すべてが機能することが期待されていました。:url シンボルを必要とする link_to_remote のように間違って使用していました。ご意見をお寄せいただきありがとうございます。

于 2012-11-27T02:33:33.743 に答える
0

rake ルートを実行すると、「flag_user_path」という名前で作成されたルートが「get」ではなく「post」を想定していることがわかると思います。

于 2012-11-26T09:39:52.700 に答える