1

ビューで次のコードによって生成されたリンクをクリックすると、次のようになります。

<%= link_to "Colleague", collaborators_path(member2_id: user.id,), :method => :post %>

次のエラーメッセージが表示されます。

No route matches [GET] "/collaborators"

ただし、routesファイルには次の行があります。

resources :collaborators, only: [:create, :destroy]

そして、collaborators_controllerに次の定義が書き出されています。

  @collaboration = current_user.collaborations.build(:member2_id => params[:member2_id])
      if @collaboration.save
        flash[:notice] = "Added collaborator."
        redirect_to root_url
      else
        flash[:error] = "Unable to add collaborator."
        redirect_to root_url
      end

では、コラボレーションを作成するためのパスをルーターが見つけてはいけませんか?

4

2 に答える 2

1

を使用しているためですonly: [:create, :destroy]。ルートを作成するには:index、その配列に含める必要があります。ルーティングに関するRailsガイドをGET /collaborators参照してください

また、でリンクを使用するには、Rails3の控えめなJavascript機能:method => :postを使用する必要があります。

于 2013-03-16T07:27:55.080 に答える
1

:method => :postリンクを使用しているため、 が無視されているようです。POST メソッドは、フォームを送信するときによく使用されます。実際には、データベースに新しいレコードを追加するためにブラウザからサーバーにデータを送信するために POST メソッドが使用されます。詳細については、HTTP メソッドに関するウィキペディアの記事と、Rails Guides on Routingを参照してください。

あなたがやろうとしていることが同僚として誰かを追加することである場合 (Twitter の「フォロー」アクションや Facebook の「いいね」のように)、非表示フィールドにユーザーの ID を含む小さなフォームを作成する必要があります。

TL;DR : リンクが機能しないため、フォームを使用して関係を作成します :)

于 2013-03-16T17:35:33.660 に答える