Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 使URL成为文章的标题_Ruby On Rails 3_Url_Routes_Format - Fatal编程技术网

Ruby on rails 3 使URL成为文章的标题

Ruby on rails 3 使URL成为文章的标题,ruby-on-rails-3,url,routes,format,Ruby On Rails 3,Url,Routes,Format,目前我的URL显示为www.website.com/entries/1,我想让它们显示为www.website.com/title of entry。我一直在处理路由,并且能够在URL中显示条目标题,但是Rails无法在不提供ID的情况下找到条目。如果我将ID与参数一起发送,URL将显示为www.website.com/title of entry?=1。我是否可以传递ID而不将其作为参数显示在URL中?谢谢 通常您希望将此部分保存在数据库条目标题(调用字段slug或其他`)。您的模型可以如下所

目前我的URL显示为
www.website.com/entries/1
,我想让它们显示为
www.website.com/title of entry
。我一直在处理
路由
,并且能够在URL中显示
条目
标题,但是Rails无法在不提供ID的情况下找到
条目
。如果我将ID与参数一起发送,URL将显示为
www.website.com/title of entry?=1
。我是否可以传递ID而不将其作为参数显示在URL中?谢谢

通常您希望将此部分保存在数据库
条目标题
(调用字段
slug
或其他`)。您的模型可以如下所示:

class Entry < ActiveRecord::Base

  before_validation :set_slug

  def set_slug
    self.slug = self.title.parameterize
  end

  def to_param
    self.slug
  end

end
更新

要记住几件事:

  • 您必须确保
    slug
    是唯一的,否则
    条目。按slug查找(params[:id])
    将始终返回遇到此slug的第一个条目

  • Entry.find\u by_slug(params[:id])
    不会引发
    ActiveRecord::RecordNotFound
    异常,而只返回
    nil
    。考虑使用<代码> Eng.FiffyBySulg!(参数[:id])

  • 如果你真的想让你的路线看起来像这样,你以后可能会遇到问题。如果入口段塞与另一个控制器的名称相同,路由器可能会得到意外的结果


  • 和大多数事情一样,这件事也很有价值


    安装很简单,几分钟后即可启动并运行。试一试。

    非常感谢您的详细建议@Wukerplank,我昨晚在这件事上搞砸了,没法把事情做好。无论我经过哪个
    id
    ,我总是会被引导到相同的
    条目。我相信,如果有更多的时间和黑客攻击,我本可以按照你的建议让事情顺利进行,但为了不容易处理段塞/标题问题,我将使用gem。不过,你绝对应该为此投一票,再次感谢!
    
    # instad of this
    @entry = Entry.find(params[:id]
    
    # use this
    @entry = Entry.find_by_slug(params[:id])