2014-09-21 149 views
0

我有以下途徑:如何在Rails的路徑創建參數中的URL

get 'event/check_in/:event_date_id' => 'event#check_in' 

我想提供一個鏈接:

event_check_in_path(event_date_id: event_date.id) 

我希望能得到這個:

/event/check_in/5 

相反,我得到這個:

/event/check_in?event_date_id=5 

在Rails(使用4.1的最新版本)中這樣做的正確方法是什麼?

回答

0

似乎有什麼東西關閉您的路線。如果你有一個event資源,你應該映射爲這樣/event/5/check_in你的路線,所以你有一些看起來像這樣的路線:

resources :event do 
    patch :check_in, on: :member 
end 

這應該給你一個check_in_event_path。然後,您可以在事件剛剛通過的路徑:

check_in_event_path(@event) 
+0

於我而言,事件是不是一種資源。這只是一條路。 – 2014-09-22 17:19:48

+0

@at。你肯定有一個事件資源?如果不是,那就定義一個正常路徑。我沒有看到任何你想要做的事情特別複雜。我建議你閱讀Rails Routing in Rails指南。 http://guides.rubyonrails.org/routing.html – Mohamad 2014-09-23 13:11:30

0

要生成你想要的路線,發送您的event_date_id作爲,而不是一個正式的參數:

event_checkin_path(event_date.id) =>event/checkin/7

路徑傭工採取額外的命名參數可選散列,但是,你是否注意到,這些被添加到生成的URL作爲查詢參數:

event_checkin_path(event_date.id, other_param: "foo") =>event/checkin/7?other_param=foo

+0

我應該把我的問題,我已經嘗試過這一點。將路徑變爲'/ event/check_in.7'我希望句號成爲'/' – 2014-09-22 17:18:46

+0

嘗試將路由聲明爲'get'event/check_in /:event_date_id'=>'event#check_in',as ::event_checkin' - 通過Rails 4.1.5確認可以像上面那樣工作。 – 2014-09-22 17:58:34

+0

...如果這不起作用,請運行'rake routes'並在此輸出。 – 2014-09-22 18:04:36

0
#config/routes.rb 
scope module: "event" do 
    get "check_in/:event_date_id", to: "event#check_in", as: :check_in 
end 

這應該允許您撥打:

<%= link_to "Event", event_check_in_path(event_date.id) %>