我正在一个用户可以销售活动门票的网站上工作。发售活动的门票将由促销员推广。反过来,客户想要一个独特的网址,发起人可以通过电子邮件发送给潜在客户销售门票。因此,我必须创建一个唯一的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
答案 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
中会有params
和method
。这也将为您提供route_name_path
和route_name_url
帮助。
ticket
,controller
,method
和: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'