2

_follow.html.slim で、これで「友達を追加」へのリンクを作成しようとしています:

= link_to "Add Friend",  :controller => "relationships", :action => "req"

同じページにとどまりながら、リレーションシップコントローラーでメソッド req を呼び出したいです。現在、メソッドを呼び出すことさえしておらず、このエラーを返しています: No route matching {:controller=>"relationships", :action=>"req", :name=>"Nathan Glass", :age="21 "}

私はこのチュートリアルhttp://francik.name/rails2010/week10.htmlに従っていますが、彼はこのアクションのルートを定義していません。このエラーが正しければ、私の混乱がこのためのルートが必要な理由だと思います。そうでなければ、ここで私の問題は何ですか?ありがとう!

class RelationshipsController < ApplicationController
def req
    puts "req called"*10
    # is setting @current_user since the current_user method already returns @current_user?
    @current_user = current_user
    @friend = User.find_by_name(params[:name])
    unless @friend.nil?
        if Relationship.request(@current_user, @friend)
          flash[:notice] = "Friendship with #{@friend.name} requested"
        else
            flash[:error] = "Friendship with #{@friend.name} cannot be requested"
        end
    end
  # render somewhere
end

終わり

4

1 に答える 1

5

まず、アクションのルートを常に定義する必要があります。そうしないと、レールはアクションが存在することを認識しません (link_to でコントローラーとアクション名を指定しても)。

そのためには、config/routes.rb ファイルで次のように簡単に実行できます。

get 'relationships/req'

これで、req アクションにパス relationship_req_path (HTTP GET リクエストに応答) が追加されました。

次に、同じページにとどまっている間にコントローラー アクションを呼び出したい場合は、次のようにします。

link_to "Add as friend", relationships_req_path, remote: true

はリンクのremote: true動作を変更し (ajax 呼び出しのように機能します)、デフォルトで関係/req.js.erb ファイルをレンダリングします (これには何も含めることができません)。このファイルを使用すると、現在のページのコンテンツを動的に追加/変更できます。

于 2013-10-05T22:50:23.887 に答える