即使在使用slug之后,URL仍显示id而不是标题。 代码如下
index.html.erb
<title>Blog!</title>
<h1>List of the Posts</h1>
<% @posts.each do |post| %>
<%= link_to post.title,:id => post.slug%>
<p><%= post.content %></p>
<%= link_to "Edit",edit_post_path(post) %> |
<%= link_to "Delete",post,:confirm=>"Are you sure ?",:method=>:delete %>
<hr />
<% end %>
<p><%= link_to "Add a New Post",new_post_path %></p>
posts_controller.rb
class PostsController < ApplicationController
def index
@posts=Post.all
end
def show
@posts=Post.find(params[:id])
end
端
发布模型
extend FriendlyId
friendly_id :title,use: :slugged
def should_generate_new_friendly_id?
new_record
end
的routes.rb
Blog::Application.routes.draw do
get "blog/posts"
resources :posts
end
我希望链接为“ localhost:8080 / posts / this + is + the + title ”而不是“ localhost:8080 / posts / 2 ”
答案 0 :(得分:1)
我也遇到了这个问题。当我链接到我的资源的show动作时,我会在url中获取id
而不是我的slug。虽然我可以键入slugged url并且它也可以正常工作(我只是无法链接到slugged url)。事实证明,我必须使用friendly_id的命名路由助手来显示url中的slug(我在controller: 'posts', action: 'show', id: post.id
帮助器中使用了旧学校link_to
。在你的情况下,我会尝试改变:
<%= link_to post.title, :id => post.slug %>
到
<%= link_to post.title, post_path(post) %>
此外,friendly_id版本5.0要求您将控制器中的Model.find
更改为Model.friendly.find
(除非您明确覆盖它config/initializers/friendly_id.rb
。由于这是较旧的帖子,因此可能不适用于你,但我想我还是会添加它。尝试改变:
def show
@post = Post.find(params[:id])
end
到
def show
@post = Post.friendly.find(params[:id])
end
希望有所帮助!