0

次の行を使用してリンクを作成します

link_to_remote 'Delete', :url => mail_path(user_id, mail.id), :confirm => 'Delete?', :method => :delete

これにより、/mail/4.3 の形式で DELETE リクエストが作成されます。ルートは

delete 'mail/:user_id/:id', to: 'mail#destroy'

コントローラーの2つのIDにアクセスしようとしています

@mail = Mail.find(params[:id])
@user = User.find(params[:user_id])

ただし、エラーで失敗します

ActionController::RoutingError (No route matches [DELETE] "/mail/4.3")

ここで何が欠けていますか?

更新 1) 「レーキ ルート」の出力

Prefix     Verb      URI Pattern                          Controller#Action
mail       DELETE    /mail/:user_id/:id(.:format)        mail#destroy
4

1 に答える 1

2

URL を生成する理由は、パラメーターが 1 つしかないため、2 番目のパラメーターを形式として使用するためです/mail/4.3mail_pathこれは、mail_path使用している URL ヘルパーがDELETE、質問に投稿したルート用ではなく、他のルート用であるためです。

Rails Way は、次のようなネストされたリソースを持つことmailですuser

resources :users do
  resources :mail
end

ルート ヘルパーuser_mail_path(@user, @mail)(またはメールの複数形によっては同様のもの) と URL を提供します/users/4/mail/3

または、パスを続行するには、おそらく削除ルートに名前を付ける必要があります。

delete 'mail/:user_id/:id', to: 'mail#destroy', as: 'delete_mail'

delete_mail_path(user_id, mail.id)リンクで使用します。

于 2013-09-23T11:24:38.357 に答える