2009-09-05 36 views
2

我创建的模型对象从产生的支架,但现在我想的,而不是链接到
/:控制器/:ID(/对象名/ 1)/ :controller /:title(/ objectname/new_blog_post)。我如何做到这一点,以便链接将链接到标题,而不是ID?Ruby on Rails的:URL从IDS到名称/职称等

我想从去:

/:controller/:id 

/:controller/:name 

回答

4

使用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 

鉴于点击该链接

+0

+1你知道,我从来没有重写'to_param'。也许我应该开始这样做。 – theIV

+0

其实,再看一遍,这会是一个好主意吗?如果名字是空白的,他的发现在控制器中会是什么样子? – theIV

+0

它仍然可以找到一个id,如果没有名字,检查它是否将id作为url。它没有经过测试,但它展示了它的一个基本想法。 – nitecoder

1

你需要改变一些东西:

你必须在title属性传递给任何路径/ URL时,你做的东西一样link_to例如

post_path(@post) 

将成为

post_path(@post.title) 

您还可以更新您的发现,寻找通过标题的帖子,而不是ID例如

@post = Post.find(params[:id]) 

将成为

@post = Post.find_by_title(params[:title]) 

这应该让你开始:)。您显然想要扼杀标题并验证标题的唯一性。

编辑:阅读罗伯特·埃尔韦尔的回答之后,也许我误解了这个问题。你是否已经有了一种类似于你描述的特定对象的路线,或者你是否正在用“基本”路线来做这件事?如果是后者,你可以更好地写出像罗伯特所建议的自定义路线,然后做一些我建议的东西。

0

使用friendly_id。

BTW,产生的URL是不是为我工作。我已经写了我自己的模型

def to_param 
    self.friendly_id 
end 
相关问题