2015-11-01 72 views
1

這是我在路線路由文件的ActionController :: UrlGenerationError在帳戶#計劃

get '/signup/:plan/:discount' =>'accounts#new', plan: nil, discount: 0, as: :new_account 

而且我打電話我的html文件,這個路線如下圖所示

<a href="<%= new_account_url('$129', params[:discount]) %>" class="signup"><img src="/images/sign-up.png"></a> 

後耙航線運行命令後端然後我得到以下

new_account GET /signup/:plan/:discount(.:format) 
    accounts#new {:plan=>nil, :discount=>0} 

但我不知道它給出的路線有什麼問題我錯誤,如

No route matches {:action=>"new", :controller=>"accounts", :discount=>nil, :format=>nil, :plan=>"$129"} missing required keys: [:discount] 
+0

'params [:discount]'的價值是什麼? – Pavan

+0

也嘗試將路線中的折扣:零折扣改爲折扣:零。 – Pavan

+0

我也嘗試打折作爲零,但仍然無法正常工作。和params [:折扣]是不是強制性的價值時,那麼它取代零或零。 –

回答

1

您的params[:discount]缺少一個值,因此在您的路由中調用它時ES,它沒有被分配:

{:action=>"new", :controller=>"accounts", :discount=>nil, :format=>nil, :plan=>"$129"} 

既然你已經做出:discount路線的必需部分,你需要調用幫助時的值傳遞給它。


要做的最重要的事情是確保您的params[:discount]變量已填充。如果沒有,你不妨用bound parameters

get '/signup/:plan(/:discount') =>'accounts#new', discount: 0, as: :new_account 

這將使:discount參數非必需。


另外,每當創建一個鏈接時,您應該始終使用link_to。它使你的HTML最新且符合規格:

<%= link_to new_account_path("$129", params[:discount]), class: "signup" do %> 
    <%= image_tag "sign-up.png" %> 
<% end %> 

-

你還需要確保你自己適當的資源的範圍內設置你的路由:

#config/routes.rb 
resources :accounts, only: [:new], path_names: { new: "signup" } do 
    get ":plan(/:discount)", on: :new 
end 
2

當你有一個網址'/signup/:plan/:discount',然後:plan:discount都需要的關鍵。您不能將這些密鑰的值設爲nil。如果你有,你會一直得到你現在的錯誤。

由於這些值是可選的,我的建議是將它們作爲查詢參數發送,並在控制器內部進行檢查。

嘗試重組路線定義:

get '/signup' =>'accounts#new', as: :new_account 

你也可以如下使用link_to重寫URL:

<%= link_to new_account_path(plan: '$129', discount: params[:discount]), class: "signup" do %> 
    <img src="/images/sign-up.png" /> 
<% end %> 

現在,你會一直網址,如:

/signup?plain="xx"&discount="xx" 
相關問題