Rails 资源路由
Rails route to a resource
我正在构建一个 Rails 应用程序,它是一个播客目录。我有播客和剧集。 Episode 属于 Podcast,Podcast 有很多 Episode。我想在主页上显示已创建的最后 5 集,并向他们显示 link。
我用它来处理这个,虽然这显然不是这样做的方法:
<% @episodes.each do |episode| %>
<%# link_to episode do %>
<a href="http://example.com/podcasts/<%= episode.podcast_id %>/episodes/<%= episode.id %>" class="tt-case-title c-h5"><%= episode.title %></a>
<%# end %>
<% end %>
link_to
被注释掉了,因为那是我的问题的一部分。
这是索引控制器:
def index
@podcasts = Podcast.where.not(thumbnail_file_name: nil).reverse.last(5)
@episodes = Episode.where.not(episode_thumbnail_file_name: nil).reverse.last(5)
end
这是路由文件:
Rails.application.routes.draw do
devise_for :podcasts
resources :podcasts, only: [:index, :show] do
resources :episodes
end
authenticated :podcast do
root 'podcasts#dashboard', as: "authenticated_root"
end
root 'welcome#index'
end
rake routes | grep episode
的结果:
podcast_episodes GET /podcasts/:podcast_id/episodes(.:format) episodes#index
POST /podcasts/:podcast_id/episodes(.:format) episodes#create
new_podcast_episode GET /podcasts/:podcast_id/episodes/new(.:format) episodes#new
edit_podcast_episode GET /podcasts/:podcast_id/episodes/:id/edit(.:format) episodes#edit
podcast_episode GET /podcasts/:podcast_id/episodes/:id(.:format) episodes#show
PATCH /podcasts/:podcast_id/episodes/:id(.:format) episodes#update
PUT /podcasts/:podcast_id/episodes/:id(.:format) episodes#update
DELETE /podcasts/:podcast_id/episodes/:id(.:format) episodes#destroy
如何使用 link 直接指向剧集的 link_to 正确创建标题文本 link?谢谢!
当你在块中使用 link_to
时,你唯一需要传递到块中的是 link 的文本,所以你应该能够做到这一点(假设您的路线设置正确):
<% @episodes.each do |episode| %>
<%= link_to episode, class="tt-case-title c-h5" do %>
<%= episode.title %>
<% end %>
<% end %>
更新
你真的不需要在这里使用块。这对你来说应该很好用,而且更简洁一些。
<% @episodes.each do |episode| %>
<%= link_to episode.title, episode, class="tt-case-title c-h5" %>
<% end %>
更新#2
感谢您提供路线信息。试试这个:
<% @episodes.each do |episode| %>
<%= link_to episode.title, podcast_episode_path(episode.podcast, episode), class="tt-case-title c-h5" %>
<% end %>
我正在构建一个 Rails 应用程序,它是一个播客目录。我有播客和剧集。 Episode 属于 Podcast,Podcast 有很多 Episode。我想在主页上显示已创建的最后 5 集,并向他们显示 link。
我用它来处理这个,虽然这显然不是这样做的方法:
<% @episodes.each do |episode| %>
<%# link_to episode do %>
<a href="http://example.com/podcasts/<%= episode.podcast_id %>/episodes/<%= episode.id %>" class="tt-case-title c-h5"><%= episode.title %></a>
<%# end %>
<% end %>
link_to
被注释掉了,因为那是我的问题的一部分。
这是索引控制器:
def index
@podcasts = Podcast.where.not(thumbnail_file_name: nil).reverse.last(5)
@episodes = Episode.where.not(episode_thumbnail_file_name: nil).reverse.last(5)
end
这是路由文件:
Rails.application.routes.draw do
devise_for :podcasts
resources :podcasts, only: [:index, :show] do
resources :episodes
end
authenticated :podcast do
root 'podcasts#dashboard', as: "authenticated_root"
end
root 'welcome#index'
end
rake routes | grep episode
的结果:
podcast_episodes GET /podcasts/:podcast_id/episodes(.:format) episodes#index
POST /podcasts/:podcast_id/episodes(.:format) episodes#create
new_podcast_episode GET /podcasts/:podcast_id/episodes/new(.:format) episodes#new
edit_podcast_episode GET /podcasts/:podcast_id/episodes/:id/edit(.:format) episodes#edit
podcast_episode GET /podcasts/:podcast_id/episodes/:id(.:format) episodes#show
PATCH /podcasts/:podcast_id/episodes/:id(.:format) episodes#update
PUT /podcasts/:podcast_id/episodes/:id(.:format) episodes#update
DELETE /podcasts/:podcast_id/episodes/:id(.:format) episodes#destroy
如何使用 link 直接指向剧集的 link_to 正确创建标题文本 link?谢谢!
当你在块中使用 link_to
时,你唯一需要传递到块中的是 link 的文本,所以你应该能够做到这一点(假设您的路线设置正确):
<% @episodes.each do |episode| %>
<%= link_to episode, class="tt-case-title c-h5" do %>
<%= episode.title %>
<% end %>
<% end %>
更新
你真的不需要在这里使用块。这对你来说应该很好用,而且更简洁一些。
<% @episodes.each do |episode| %>
<%= link_to episode.title, episode, class="tt-case-title c-h5" %>
<% end %>
更新#2
感谢您提供路线信息。试试这个:
<% @episodes.each do |episode| %>
<%= link_to episode.title, podcast_episode_path(episode.podcast, episode), class="tt-case-title c-h5" %>
<% end %>