我创建的模型对象从产生的支架,但现在我想的,而不是链接到
/:控制器/:ID(/对象名/ 1)/ :controller /:title(/ objectname/new_blog_post)。我如何做到这一点,以便链接将链接到标题,而不是ID?Ruby on Rails的:URL从IDS到名称/职称等
我想从去:
/:controller/:id
到
/:controller/:name
我创建的模型对象从产生的支架,但现在我想的,而不是链接到
/:控制器/:ID(/对象名/ 1)/ :controller /:title(/ objectname/new_blog_post)。我如何做到这一点,以便链接将链接到标题,而不是ID?Ruby on Rails的:URL从IDS到名称/职称等
我想从去:
/:controller/:id
到
/:controller/:name
使用PARAM
class User < ActiveRecord::Base
def to_param
name.blank? ? id : name
end
end
或者寻找到一个插件,acts_as_sluggable和friendly_id是那些我所知道的。
编辑:哦,是的,并提到您确认任何你使用是独一无二的。
编辑:之后你
<% @users.each do |user| %>
<%= link_to user.name, user_path(@user.id) %>
<% end %>
而且如果用户名是约翰那么它将使/用户/约翰:
它的工作,如:
class UsersController < ActionController::Base
def index
@users = User.all
end
end
鉴于点击该链接
你需要改变一些东西:
你必须在title
属性传递给任何路径/ URL时,你做的东西一样link_to
例如
post_path(@post)
将成为
post_path(@post.title)
您还可以更新您的发现,寻找通过标题的帖子,而不是ID例如
@post = Post.find(params[:id])
将成为
@post = Post.find_by_title(params[:title])
这应该让你开始:)。您显然想要扼杀标题并验证标题的唯一性。
编辑:阅读罗伯特·埃尔韦尔的回答之后,也许我误解了这个问题。你是否已经有了一种类似于你描述的特定对象的路线,或者你是否正在用“基本”路线来做这件事?如果是后者,你可以更好地写出像罗伯特所建议的自定义路线,然后做一些我建议的东西。
使用friendly_id。
BTW,产生的URL是不是为我工作。我已经写了我自己的模型
def to_param
self.friendly_id
end
+1你知道,我从来没有重写'to_param'。也许我应该开始这样做。 – theIV
其实,再看一遍,这会是一个好主意吗?如果名字是空白的,他的发现在控制器中会是什么样子? – theIV
它仍然可以找到一个id,如果没有名字,检查它是否将id作为url。它没有经过测试,但它展示了它的一个基本想法。 – nitecoder