为什么此 Rails 视图中的编辑链接具有相同的 id?

发布于 2024-12-19 04:46:13 字数 2744 浏览 2 评论 0原文

在这个模型中,预定的比赛和玩家是特许经营的嵌套资源,路由设置如下:

OTH::Application.routes.draw do
  resources :franchises do
    resources :scheduled_games
    resources :players
  end

我可以正确创建这些模型对象。但我一定在视图中做错了什么,如下所示:

<% @franchise.scheduled_games.each do |game| %>
  <p class="games">
    <span class="date">   
    <b>Opponent:</b>  <%= game.opponent %> 
    <b>date:</b>    <%= game.date %>

  <%= link_to 'Edit',edit_franchise_scheduled_game_path(@franchise) %> 
  </span> </p>
<% end %>

显示此视图时,有两件事出了问题。最糟糕的是,每个编辑链接都具有相同的嵌套资源 ID (/franchises/1/scheduled_games/1/edit),即使该项目的其他信息是正确的。

其次,总是显示空白记录。

我哪里出错了?

更新 这是 rake 路由的输出:

franchise_scheduled_games 
GET    /franchises/:franchise_id/scheduled_games(.:format)          {:action=>"index", :controller=>"scheduled_games"}
POST   /franchises/:franchise_id/scheduled_games(.:format)          {:action=>"create", :controller=>"scheduled_games"}
 new_franchise_scheduled_game 
GET    /franchises/:franchise_id/scheduled_games/new(.:format)      {:action=>"new", :controller=>"scheduled_games"}
edit_franchise_scheduled_game 
GET    /franchises/:franchise_id/scheduled_games/:id/edit(.:format) {:action=>"edit", :controller=>"scheduled_games"}
     franchise_scheduled_game 
GET    /franchises/:franchise_id/scheduled_games/:id(.:format)      {:action=>"show", :controller=>"scheduled_games"}
PUT    /franchises/:franchise_id/scheduled_games/:id(.:format)      {:action=>"update", :controller=>"scheduled_games"}
DELETE /franchises/:franchise_id/scheduled_games/:id(.:format)      {:action=>"destroy", :controller=>"scheduled_games"}

franchise_players 
GET    /franchises/:franchise_id/players(.:format)                  {:action=>"index", :controller=>"players"}
POST   /franchises/:franchise_id/players(.:format)                  {:action=>"create", :controller=>"players"}
         new_franchise_player 
GET    /franchises/:franchise_id/players/new(.:format)              {:action=>"new", :controller=>"players"}
        edit_franchise_player 
GET    /franchises/:franchise_id/players/:id/edit(.:format)         {:action=>"edit", :controller=>"players"}
             franchise_player 
GET    /franchises/:franchise_id/players/:id(.:format)              {:action=>"show", :controller=>"players"}
PUT    /franchises/:franchise_id/players/:id(.:format)              {:action=>"update", :controller=>"players"}
DELETE /franchises/:franchise_id/players/:id(.:format)              {:action=>"destroy", :controller=>"players"}

In this model, scheduled games and players are nested resources of franchise, with routing set up as follows:

OTH::Application.routes.draw do
  resources :franchises do
    resources :scheduled_games
    resources :players
  end

I can create these model objects correctly. But I must be doing something wrong in the view, which looks like this:

<% @franchise.scheduled_games.each do |game| %>
  <p class="games">
    <span class="date">   
    <b>Opponent:</b>  <%= game.opponent %> 
    <b>date:</b>    <%= game.date %>

  <%= link_to 'Edit',edit_franchise_scheduled_game_path(@franchise) %> 
  </span> </p>
<% end %>

There are two things that are going wrong when this view is displayed. The worst is that each edit link has the same id for the nested resource (/franchises/1/scheduled_games/1/edit) even though the other information for the item is correct.

Second is that a blank record always displays.

Where have I gone wrong?

Update Here is the output of rake routes:

franchise_scheduled_games 
GET    /franchises/:franchise_id/scheduled_games(.:format)          {:action=>"index", :controller=>"scheduled_games"}
POST   /franchises/:franchise_id/scheduled_games(.:format)          {:action=>"create", :controller=>"scheduled_games"}
 new_franchise_scheduled_game 
GET    /franchises/:franchise_id/scheduled_games/new(.:format)      {:action=>"new", :controller=>"scheduled_games"}
edit_franchise_scheduled_game 
GET    /franchises/:franchise_id/scheduled_games/:id/edit(.:format) {:action=>"edit", :controller=>"scheduled_games"}
     franchise_scheduled_game 
GET    /franchises/:franchise_id/scheduled_games/:id(.:format)      {:action=>"show", :controller=>"scheduled_games"}
PUT    /franchises/:franchise_id/scheduled_games/:id(.:format)      {:action=>"update", :controller=>"scheduled_games"}
DELETE /franchises/:franchise_id/scheduled_games/:id(.:format)      {:action=>"destroy", :controller=>"scheduled_games"}

franchise_players 
GET    /franchises/:franchise_id/players(.:format)                  {:action=>"index", :controller=>"players"}
POST   /franchises/:franchise_id/players(.:format)                  {:action=>"create", :controller=>"players"}
         new_franchise_player 
GET    /franchises/:franchise_id/players/new(.:format)              {:action=>"new", :controller=>"players"}
        edit_franchise_player 
GET    /franchises/:franchise_id/players/:id/edit(.:format)         {:action=>"edit", :controller=>"players"}
             franchise_player 
GET    /franchises/:franchise_id/players/:id(.:format)              {:action=>"show", :controller=>"players"}
PUT    /franchises/:franchise_id/players/:id(.:format)              {:action=>"update", :controller=>"players"}
DELETE /franchises/:franchise_id/players/:id(.:format)              {:action=>"destroy", :controller=>"players"}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谜兔 2024-12-26 04:46:13

link_to 与嵌套资源结合使用

edit_franchise_scheduled_game_path(@franchise, game)

You need to specify the game as well when using link_to with nested resources:

edit_franchise_scheduled_game_path(@franchise, game)
水染的天色ゝ 2024-12-26 04:46:13

因为它们使用 REST 模式,所以如果您想删除资源,您可以使用 HTTP/Delete 请求到与 GET 请求相同的 URL。

Because they use the REST pattern, so if you want to delete a resource you use the HTTP/Delete request to the same url as you would for a GET request.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文