【问题标题】:Clean url with rails使用 rails 清理 url
【发布时间】:2013-10-22 06:43:33
【问题描述】:

我不能使用任何 gem 在 rails 中创建干净的 Url。相反,我正在推出自己的实现。我在 routes.rb 中创建了以下条目

match "/:slug" => "cleanurls#index"

其中 cleanurl 是用于处理所有此类请求的控制器。在 cleanurl 控制器中:

class CleanurlsController < ApplicationController


 def index

  slug  = params['slug']

  url = Url.where(:slug => slug).first

  case(url.url_type) 

       when 'profile'

                 user_id = url.id.to_i
                 @profile = Profile_info.getProfileDetails(user_id)
                 render '/profiles/index'
       end

 end

end

我创建了表urls,其中存储了slugid(相关)和type of page。现在我只有个人资料页面要处理,但将来我将拥有不同类型的页面,这些页面具有干净的 url。

我的第一个问题:

1) 这种实现方法是否正确?鉴于表具有所有正确的索引,从性能角度来看,这是否可行。

我正在制作这样的个人资料网址:

    def self.makeProfileUrl(id,name)

     name = name.strip.titleize

     extension = User.where(:name => name).count - 1

     slug = name.split(" ").join("-")

     if extension != 0
        slug += "-#{extension}"
     end

        Url.create(:slug => slug, :id => id.to_i, :url_type => 'profile')

   end

我正在使用扩展来追加计数,以防他们是共享相同名称的用户。

问题:

这是创建 slug 并确保其独一无二的正确方法吗?从另一个表中获取名称的计数似乎不正确。

【问题讨论】:

  • 为什么不能使用宝石?提示:您已经通过 Rails 使用了其中的许多。
  • 我使用了很多宝石,但总的来说我并没有变化。但是,对于这种特定情况,我正在寻找自己的实现。
  • 但是为什么要解决已经解决的问题呢?我的意思是,除非您出于教育目的而做这一切,否则没有理由鄙视经过良好测试的宝石。
  • 友好的 id gem 会生成这样的 url(来自 github)GET localhost:3000/users/joe-schmoe 而我想要它在 GET localhost:3000/joe-schmoe
  • 这是我决定推出自己的产品的第一个原因。

标签: ruby-on-rails ruby ruby-on-rails-3 clean-urls


【解决方案1】:

回答问题 #1:

我不知道您的总体目标的详细信息,但如果您愿意 拥有基于数据库记录的此类 URL - 那么是的:它是 一个很好的方法。

回答问题 #2(关于蛞蝓):

我宁愿使用更精细且经过良好测试的东西,例如: https://github.com/norman/friendly_id

我对其他事情的 50 美分:

这是您在 Ruby/Rails 中的第一个项目吗?如果是这样 - 恭喜! :) 我之所以问,是因为我注意到您在这里和那里都在使用骆驼皮套……

还有:

user_id = url.id.to_i

为什么在这里调用这个#to_i 方法?您是否将此 id 设置为字符串 还是什么?

希望对你有帮助

【讨论】:

  • 我知道友好的 id,但我可能想使用它的一部分来创建 url 而不是路由它。是的,这是我的第一个 RAILS 项目,除了我喜欢骆驼案。使事情变得可读。复制了特定的 sn-p 代码,我从编写它的 GET 参数中获取了 id。出于安全原因,我将转换为整数,以确保仅将数字传递到预期传递的位置。
  • @VarunJain 当然不禁止使用驼峰式大小写,但 Ruby 中的约定是仅对类名使用驼峰式大小写。在其他地方使用骆驼皮套会让你成为菜鸟。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多