电子邮件地址路由

时间:2013-06-13 16:47:04

标签: ruby-on-rails routing

所以基本概念是,我想要一个如此路由的应用程序:

http://host/subscriptions/my@email.com/new # create a new subscription
http://host/subscriptions/my@email.com/7/  # view the subscription with id 7

现在,我发现的典型导航方式是使用ID,我在SO和其他博客周围看过如何使用用户名,但是没有找到任何电子邮件地址,对我来说,我不会认为他们的行为不同,但他们似乎无法得到相同的结果。

现在,我已经尝试过多种方法,而且我现在最接近我的结果,现在我只需要SO来帮忙!

在我的路线档案中 -

routes.rb:
----------
SubscriptionCenter::Application.routes.draw do
  resources :subscriptions, :constraints => { :id => /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/ }
  resources :subscribers
  resources :batches
  resources :batch_runs
  ...

正如您在此处所见 - 我将我的电子邮件地址视为ID。我正在使用电子邮件地址正则表达式,但工作正常,但对我来说这很脏。

我的模型看起来像

class Subscription < ActiveRecord::Base
  attr_accessible :batch_id, :subscriber_id
  ...

表示要订阅的批次的批次ID,以及表示我拥有的另一个型号的subscriber_id -

class Subscriber < ActiveRecord::Base
  attr_accessible :id, :email_address
  ...

所以我的问题 -

在我的控制器中,我正在使用

params[:id]

获取电子邮件地址。

问题:

  1. 我可以用params [:email_address]替换params [:id]吗? (params [:email_address]对我不起作用)
  2. 我在路线中看到过命名空间,我理解这个概念,但我如何将其用于像电子邮件一样动态的东西?我不使用命名空间,而是使用多个匹配项,例如match 'subscriptions/:id/new', :to => 'subscription#new'
  3. 假设以下网址为:http://host/subscriptions/my@email.com/7/。如果我继续使用params[:id]来收发电子邮件,我最终会如何获取7? 7表示batch_id列

1 个答案:

答案 0 :(得分:2)

你看过friendly_id宝石了吗?我认为这将解决您的问题