2012-03-08 8 views
0

タイトルに書いたとおり、私はゲームをクリックしようとすると次のエラーが表示されますページ。経路が一致しません{:locale =>:en、:action => "email"、:controller => "games"}

これは私が私のgames_controllerに持っているものです。

def email 

    respond_to do |format| 
     user = @game.user 
     email = user.email 
     g = GameTrade.game_interest(user) 
     g.deliver 
     format.html { redirect_to root_url } 
     format.json { render json: @game } 
    end 
    end 

、これは私が私のルートページで

<%= button_to "Send Email", :action => 'email'%> 

show.html.erbに私はラインのリソースを持っているているものです:ゲーム

答えて

2

"email"はリソースの標準ルートではないため、そのルートを追加する必要があります。リンク(ボタン)をたどると変更が発生するため、理想的にはこれはPOSTリクエストになります。最後に、コードを少し脆くするようにアクションを指定するのではなく、URLヘルパーを使用することに固執する必要があります。

あなたのroutes.rbをしてこのような何かを試してみてください:

resources :games do 
    post 'email', :on => :member 
end 

次に、あなたのビューでは、そのようなあなたのボタンを生成します。

<%= button_to "Send Email", email_game_path(@game) %> 

あなたは、あなたのゲームを見つける必要がありますあなたがそれを使って何かできるようになる前に、通常の方法で電子メールアクションをメールしてください:

@game = Game.find(params[:id]) 
+0

ああ、実際には最後の行が入っています私のコントローラはちょうどここにコピーされませんでした:sの好奇心から:将来の参照のためのルートのメンバーですか? – user1222136

+1

メンバーはゲームのリソースIDを期待しているルートを指示します。さもなければ、それはa:collectionであり、indexアクションと同じです。他のメンバーの行動は、ショー、編集、作成、更新、破壊です。彼らはすべてリソースIDを期待しています。 – Jon

関連する問題