Ruby on Rails路由问题

时间:2011-08-18 04:05:18

标签: ruby-on-rails ruby

我正在一个用户可以销售活动门票的网站上工作。发售活动的门票将由促销员推广。反过来,客户想要一个独特的网址,发起人可以通过电子邮件发送给潜在客户销售门票。因此,我必须创建一个唯一的URL,其中包含促销员唯一代码以及事件ID(跟踪销售)。我遇到的问题是弄清楚如何创建这个独特的网址。 Event和Promoter之间存在多对多关系,由Promotion表连接在一起。促销表将跟踪每个活动的促销员,并具有存储已售票数的属性。在Promoter表中,我将存储基本信息,例如名称,以及系统将生成的唯一代码。

我知道我可以创建一个命名路由,可以通过id找到一个Event或者通过id找到一个Promoter。问题是我需要在url中包含事件ID以及启动器的唯一代码(除非有更好的方法来执行此操作)。然后,我将能够编写一个查询来查找具有Promoter唯一代码条件的事件。

关于如何实现这一目标的任何想法?我认为令我感到困惑的是网址中有两个参数。

更新

map.buy_ticket 'buy_ticket/:id_1/:id_2',
 :controller => :events,
 :action => :buyTicket,
 :id_1 => /\d+/,
 :id_2 => /[a-z]+[0-9]+/i

4 个答案:

答案 0 :(得分:1)

您可以根据自己的问题找到答案。当我分享这个问题的链接时,这就是我所拥有的:

http://stackoverflow.com/q/7102231/293686

数字 7102231 是您的问题ID, 293686 是我的用户ID,因此,当我在其他地方分享此问题时,我知道是我做了它,与你想要做的事情是一样的,只需创建一个包含两个ID的路线就可以了。

答案 1 :(得分:1)

注意:这些路由适用于Rails 3.我可能应该先询问您使用的是哪个版本: - )

促销是活动和促销活动之间的联接表吗?如果是这种情况,您只需使用促销资源来跟踪两者。

如果情况并非如此,路线中的多个参数是一个简单的问题,可以通过多种方式处理。

您可以嵌套资源,例如

resources :events do
  resources :promotions
end

# which would result in urls like /events/:event_id/promotions/:id

或者你可以像

一样自己绘制地图
get "/events/:event_id/promos/:promoter_code", :to => "events#show"

# Which would manually map the route to events_controller#show, passing along your 
# event id and a unique promoter code.  Just an example, but you get the idea.

答案 2 :(得分:0)

您可以手动创建几乎所需的任何格式的路线。您的routes.rb

中有类似的内容
match '/ticket/:promoter_id:/:event_id' => 'controller#method', :via => :get, :as => :route_name

然后,当:promoter_id被调用时,:event_id中会有paramsmethod。这也将为您提供route_name_pathroute_name_url帮助。

ticketcontrollermethod:route_name当然只是用于演示目的的占位符。

routing guide有更多详情。

答案 3 :(得分:0)

您只需创建一条非资源丰富的路线:

get 'event/:id/promotion/:unique_code' => 'event#promotion', :as => 'event_promotion'

,网址为event/32/promotion/AEBCDE,event_id为32,促销代码为'AEBCDE'