ove*_*low 3 ruby-on-rails rails-routing ruby-on-rails-4
我认为我有以下循环
<% @posts.each do |post| %>
<%= link_to post do %>
Some html
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
上面的代码将生成链接为 localhost:3000/posts/sdfsdf-sdfsdf
但我想把链接作为 localhost:3000/sdfsdf-sdfsdf
这是我的路线
resources :posts, except: [:show]
scope '/' do
match ':id', to: 'posts#show', via: :get
end
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
#config/routes.rb
resources :posts, path: "" #-> domain.com/this-path-goes-to-posts-show
Run Code Online (Sandbox Code Playgroud)
-
另外,请确保将其放在路线的底部 ; 因为它会覆盖任何前面的路线.例如,除非在文件底部定义路径,否则domain.com/users将重定向到posts路径postsroutes.rb
-
friendly_id
为了实现基于slug的路由系统(有效),您最适合使用friendly_id.这允许.find方法查找slug以及id扩展模型:
#app/models/post.rb
Class Post < ActiveRecord::Base
extend FriendlyID
friendly_id :title, use: [:slugged, :finders]
end
Run Code Online (Sandbox Code Playgroud)
这将允许您在控制器中使用以下内容:
#app/controllers/posts_controller.rb
Class PostsController < ApplicationController
def show
@post = Post.find params[:id] #-> this can be either ID or slug
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1905 次 |
| 最近记录: |