2012-03-08 102 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 

,这就是我在show.html.erb

<%= button_to "Send Email", :action => 'email'%> 
在我的路线页面

我有线路资源:游戏

回答

2

“email”不是资源的标准路由,因此您需要为其添加路由。理想情况下,这将是一个POST请求,因为遵循该链接(按钮)会导致发生更改。最后,你应该坚持使用url helper而不是指定动作,因为它们会让你的代码变得脆弱。

尝试这样的事情在你的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 2012-03-08 13:25:52

+1

会员告诉你游戏的资源ID需要的路线。否则,它将是一个:collection,就像索引操作一样。其他成员操作是显示,编辑,创建,更新,销毁。他们都期待资源ID。 – Jon 2012-03-08 13:49:38

相关问题