0

ユーザーがプロ メンバーシップにサインアップできるようにする Rails アプリがあります。キャンセルしたい場合は、このリンクをクリックすると、promembers_controller.rb で破棄アクションがトリガーされます。

<%= link_to "Cancel my account", promember_path(@user), :data => { :confirm => "Are you sure?" }, :method => :delete, :class => 'btn btn-mini' %>

このリンクを 2 つの異なるページで使用しようとしましたが、そのうちの 1 つ、つまりユーザーのプロフィール ページからしか機能しません。

  http://localhost:3000/lawyer_profiles/22-user-name

ただし、そのページにサブスクリプションをキャンセルするリンクは必要ありません。

このように、ネストされたpromembers_controllerの「表示」ページにリンクを配置すると

   http://localhost:3000/lawyer_profiles/22-user-name/promembers/40

または、このように編集ページに配置すると

http://localhost:3000/lawyer_profiles/22-user-name/promembers/37/edit

次に、次のルーティング エラーが発生します。

No route matches [DELETE] "/promembers"

ルートがある限り、そのリンクをどこに置くかで違いが生じる理由がわかりません。

  resources :promembers do

     member { post :update_card }

  end 

「破棄」という名前のアクションもありますpromembers_controller.rb

上記のネストされていない :promembers リソースに加えて、routes.rb ファイルにもこのようにネストされた :promembers があることに注意してください。

  resources :lawyer_profiles do   
     resources :promembers
  end

(同じリソースをネストしたものとネストしていないものがリンクの動作に影響するかどうかはわかりません。)

ネストされたページからリンクが機能しない理由を説明できますか?

4

1 に答える 1

1

パスヘルパーを使用してリンクを構築しています。変数は、機能しているページのコントローラーアクションに設定されていますpromember_path(@user)@user

機能していないページでは、変数を設定していない可能性が高い@userため、パス ヘルパーに nil が渡されます。

[delete] /promembers/:id のルートがあるのは事実ですが、nil をヘルパーに渡すと生成される [delete] /promembers のルートはありません。これにより、ルートなしエラーが発生します。

于 2013-05-26T23:48:05.030 に答える