2015-11-01 2 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

Также попробуйте изменить 'discount: 0' на' discount: nil' на этом маршруте. – Pavan

+0

Я также пробовал со скидкой как ноль, но все еще не работал. и params [: discount] не является обязательным, когда значение приходит, тогда оно заменяется на nil или 0. –

ответ

1

Ваш params[:discount] не имеет значения, поэтому, когда вы вызываете его в своем маршруте эс, он не назначается:

{: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

Если у вас есть URL '/signup/:plan/:discount', то :plan и :discount оба необходимый ключ. Вы никогда не можете иметь значения для этих ключей как nil. Если у вас есть, вы всегда получите ошибку, которую имеете прямо сейчас.

Поскольку эти значения являются необязательными, мое предложение состоит в том, чтобы отправить их как параметр запроса и выполнить проверку внутри контроллера.

Try реорганизовать определение маршрута:

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

Вы также можете переписывать URL, используя link_to, как показано ниже:

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

Теперь вы всегда URL-адрес, как:

/signup?plain="xx"&discount="xx" 
Смежные вопросы