【发布时间】: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,其中存储了slug、id(相关)和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