Friendly_ID Ruby on Rails
即使在使用slug之后,该URL仍然显示id而不是标题。 如下代码Friendly_ID Ruby on Rails
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
我想链接是 '本地主机:8080 /职位/这是+的+标题' 而不是'本地主机:8080 /帖子/ 2'
我也遇到过这个问题。当我链接到我的资源的显示操作时,我会在URL中获取id
而不是我的slu。。尽管我可以输入slugged网址,但它也可以正常工作(我只是无法链接到slugged网址)。事实证明,我不得不使用命名的路由帮助器friendly_id来显示网址中的slu((我在link_to
助手中使用老派controller: 'posts', action: 'show', id: post.id
)。在你的情况,我会尝试改变:
<%= 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
希望有帮助!
有这个相同的问题......如果你手动输入它们,slu work将会工作,但是如果你点击一个链接,这个ID仍然会显示出来。 – 2014-10-06 17:53:31
它是不好的格式,或者你在你的控制器中做'extend'等吗? – pduersteler 2013-02-15 10:55:30