0

理解できない

routes.rb に書き込みがあります

   match  'promotions/:id/purchase' => 'promotions#purchase', :as => :purchase_promo

Promotions_controller.rb に次を追加しました:

    def purchase
    @promotion = Promotion.find(params[:id])
    respond_to do |format|
    format.html # purchase.html.erb
    format.json { render json: @promotion }
    end
    end

ビューのプロモーションでファイル purchase.erb.html を作成する

   <div data-role="page" id="acquisto">

    <div data-role="header" data-theme="e">
    <h1>Purchase?</h1>
   </div><!-- /header -->

    <div data-role="content" data-theme="d">
    <h4>This promo costs <%= @promotion.price  %> .</h4>
    <p>bla bla bla bla bla bla bla bla bla.</p>
     <a href="index.html" data-role="button" data-rel="back" data-theme="b">Purchase       album</a>
     <a href="index.html" data-role="button" data-rel="back">No thanks</a>

     </div>

     </div><!-- /page -->

そして別のページに書き込みます

    <%= link_to 'Buy Promo',:purchase_promo ,'data-rel'=>'dialog',' data-transition'=>'slideup' %>

なにが問題ですか?

ルーティング エラーが発生する

{:controller="promotions", :action="purchase"} に一致するルートはありません

4

1 に答える 1

2

作成したルートには ID が必要です。リンクするには、次を使用します。

link_to 'Buy Promo', purchase_promo_path(some_id)

適切な ID ソースが何であるかはすぐにはわかりませんが、提供したコードに基づいて、おそらく次のものが必要です。

<%= link_to 'Buy Promo', purchase_promo_path(@promotion) ,'data-rel'=>'dialog',' data-transition'=>'slideup' %>

次のような方法で、このようなルートを構築することもできます。

resources :promotions do
  member do
    post :purchase
  end
end

これにより、通常のコレクション レベルおよびメンバー レベルのルート ( indexshowなど) が作成されpurchase、メソッドを使用しての追加のメンバー レベルのルートも作成されPOSTます (おそらく、購入を開始するために RESTful にする必要があります)。どちらの場合も、ID を提供し、_pathヘルパーを使用して URL を取得する必要があります。

于 2013-05-26T22:23:04.213 に答える