2013-10-22 71 views
0

我不能使用任何宝石来创建干净的Url在rails中。相反,我正在推出自己的实施。我在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 

我已创建存储该slugid(如相关)和type of pageurls。现在,我只有个人资料页面来处理,但将来我会使用干净的网址来创建不同类型的网页。

我的第一个问题:

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 

我使用扩展到追加的情况下,他们是谁共享同一名称的用户计数。

问:

这是创建蛞蝓,并确保它是唯一正确的方法是什么?从另一个表中获取名称的计数似乎不正确。

+0

为什么你不能使用宝石?提示:您已经通过使用Rails使用了其中的很多。 –

+0

我使用了很多宝石,而且我一般都没有变化。对于这个特定的情况,但是我正在寻找我自己的实现。 –

+0

但为什么要解决已经解决的问题?我的意思是,除非你为了教育目的而做这件事,否则没有理由轻视经过充分测试的宝石。 –

回答

1

回答这个问题#1:

我不知道什么是你的总体目标的细节,但如果你想 有是基于从数据库中记录的此类URL - 然后是的:这是 一个很好的方法。

答题#2(关于蛞蝓):

我宁愿使用一些更精细,像很好的测试: https://github.com/norman/friendly_id

我50其他的一些事情美分:

这是您的第一个Ruby/Rails项目吗?如果是这样 - 恭喜! :) 我这么问是因为我注意到,你在这里和那里用骆驼...

另外:

user_id = url.id.to_i 

你为什么在这里调用此方法#to_i?你是否设置了这个ID作为字符串 什么的?

希望这会有所帮助

+0

我知道友好的id,但我可能想使用它的一部分只是为了创建url而不是路由它。 是的,这是我的第一个RAILS项目,除了我喜欢骆驼的情况。使事情可读。 代码的特定片段被复制了,我从GET参数中获取了我写的代码。为安全起见,我为了整数转换为整数,以确保只有数字在传递时才被传递。 –

+0

@VarunJain当然不会使用骆驼案件,但Ruby中的约定是仅将骆驼案件用于类名称。在其他地方使用骆驼案例会让你成为一名新手。 –