0

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

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 和其他博客中看到了如何使用用户名,但在电子邮件地址上没有找到任何内容,对我来说,我认为他们不会d 采取不同的行动,但他们似乎因为我无法得到相同的结果。

现在,我尝试了多种方法,现在我最接近我的结果,现在我只需要帮助!

在我的路线文件中 -

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
  ...

Batch ID 代表要订阅的批次,subscriber_id 代表我拥有的另一个模型 -

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

所以对于我的问题-

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

params[:id]

获取电子邮件地址。

问题:

  1. 我可以用更合适的东西代替 params[:id],比如 params[:email_address]?(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 列
4

1 回答 1

2

你看过friendly_id gem吗?我认为这会解决你的问题

于 2013-06-13T17:11:34.037 回答