5

私のビューには次のコードがあります (RoR 4):

tbody
  - @order_submissions.each do |order_submission|
    tr
      td = order_submission.id
      td.table-actions
        span = link_to "Show", order_submissions_path(order_submission.id)

td = order_submission.id 

ID番号(533ab7337764690d6d000000)として正常に表示されます

しかし...

order_submissions_path(order_submission.id) 

次のような URL を作成します。

order_submissions.533ab7337764690d6d000000

なりたい

order_submissions/533ab7337764690d6d000000

その期間はどこから来たのですか?

これは私のルートです:

get 'order_submissions/:id'         => 'order_submissions#show'

rake routes を実行すると、次のようになります。

GET    /order_submissions/:id(.:format)        order_submissions#show

(.:format) はおそらくそれを台無しにしているものですが、その理由はわかりません。そこにスラッシュを入れたいだけです。

コードをこれに変更すると、修正されます。

 span = link_to "Show", order_submissions_path + '/' + order_submission.id

しかし、それは本当に、本当にばかげた回避策です。

編集:ここに私のルートがあります:

   get 'order_submissions'             => 'order_submissions#index'
   get 'order_submissions/new'         => 'order_submissions#new'
   post 'order_submissions'            => 'order_submissions#create'
   get 'order_submissions/:id'         => 'order_submissions#show'
   get 'order_submissions/:id/edit'    => 'order_submissions#edit'
   patch 'order_submissions/:id'       => 'order_submissions#update'
   get 'order_submissions/:id/delete'  => 'order_submissions#delete'
   delete 'order_submissions/:id'      => 'order_submissions#destroy'
4

3 に答える 3

9

(order_submissions_path複数) は を指し/order_submissionsます。最初の引数はリクエストのフォーマット (例: html) です。ID がこの引数に渡され、表示される結果の URL につながります。

実際にはorder_submission_path、最初の引数として ID を受け入れる特異パス ヘルパー が必要です。

于 2014-04-01T16:40:10.130 に答える
4

単数形でなければならないため:

order_submission_path(order_submission.id) 

いいえ

order_submissions_path(order_submission.id)

order_submissions_pathインデックス アクションをポイントします。id端から外すこともできます。

アップデート:

ファイルをルーティングすることに注意してください。そこで定義されたリソースはありますか? 投稿したルートは、ルート名を指定していないため、url_helper を生成しません (おそらく、このエントリは廃止されている可能性がありresources :order_submissionsます。そこにもあると思います)。

于 2014-04-01T16:35:56.103 に答える
1

デフォルトでは、名前付きルートは取得されません。rake routesたとえば、表示したルートには名前付きルートがリストされていません。

GET /order_submissions/:id(.:format) order_submissions#show

通常、その前に名前付きルートが表示されGETます。

したがって、自分で定義すると、ルートが機能します。

get 'order_submissions/:id' => 'order_submissions#show', as: :order_submission

as: :order_submission少し注意してください。さて、order_submission_path(order_submission.id)動作します。(注:に応答してを返す.id場合は不要です。)order_submissionto_pathid

rake routes出力に、指定した名前付きルートを使用し、使用しない別のルートがあると思います/:id。おそらくあなたのインデックスルートですか?

于 2014-04-01T16:41:34.257 に答える