Mic*_*Liu 8 ruby resources routing ruby-on-rails ruby-on-rails-4
这是我在rails中的第一个项目,即创建一个存储游戏数据的表.我能够从表格中显示关于赢家得分,输家得分等的数据.但是,我的表格列中存在包含每个游戏的删除链接的问题.
这是我在删除方法的游戏控制器中的代码:
def delete
@game = Game.find(params[:game])
@game.destroy()
redirect_to :action => 'index'
end
Run Code Online (Sandbox Code Playgroud)
我的表代码片段,其中包含link_to命令的行
<% @games_items.each do |t| %>
<tr>
<td><%= t.winner.name %></td>
<td><%= t.loser.name %></td>
<td><%= t.challenger.name %></td>
<td><%= t.winner_score %></td>
<td><%= t.loser_score %></td>
<td><%= link_to 'Delete', delete_game_path(id: t.id)%></td>
</tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)
在我调用的路由文件中
resources :games
Run Code Online (Sandbox Code Playgroud)
据我所知,这有助于生成基本路由.任何人都可以帮我弄清楚为什么我的link_to不起作用?
Mar*_*pka 17
如果您使用(建议)resources:a)您应该命名您删除记录的操作destroy.b)使用:id参数搜索游戏:
def destroy
@game = Game.find(params[:id])
@game.destroy
redirect_to :action => 'index'
end
Run Code Online (Sandbox Code Playgroud)
c)您的链接应该是:
<%= link_to 'Delete', t, method: :delete %>
Run Code Online (Sandbox Code Playgroud)
由于路径与show动作相同,因此唯一改变的是HTTP方法.
删除调用的格式为:
<%= link_to 'Delete', game_path(t.id), :method => :delete %>
Run Code Online (Sandbox Code Playgroud)
用于rake routes了解可用的路由,包括生成的路由助手,以及处理请求的控制器/操作.
我在rails 4.2.1上有类似的问题,即使使用:method =>:delete on link_to它仍然路由到show方法.
但是使用如下的button_to方法有效!
<%= button_to "delete", article_path(:id => article.id), :method => :delete %>
Run Code Online (Sandbox Code Playgroud)
button_to在按钮周围创建一个表单然后发布到delete方法,通过添加一个名为_methodvalue 的隐藏字段deleterails使用它来路由到控制器中的destroy方法.