未为资源定义的路径变量

时间:2012-02-11 22:39:11

标签: ruby-on-rails

我尝试从下拉菜单中按照提交按钮更改应用程序的语言。 我在route.rb中引入了一个名为“language_change”的控制器:

resources :language_change, :only => [:create, :new] 

在视图home.html.erb中,我这样说:

<%= form_tag language_change_path, :method=>:post do %>
<div class="field">
    <%= select_tag(params[:l],
       options_for_select(
      [[t('language.english'),'en'],
       [t('language.french'), 'fr'],
       [t('language.dutch'), 'nl']], params[:l]),
       )   
     %>  
 </div>
 <div class="actions"> <%= submit_tag "Change language!" %>
<% end %>

最后在控制器中我放了:

class LanguageChangeController < ApplicationController
  def create
    I18n.locale=params[:l]
  end 
end

加载主页时,我收到以下错误消息:

undefined local variable or method `language_change_path'

有人能告诉我出了什么问题吗? 我不明白的是,在视图中我用应用程序中其他地方定义的另一个控制器替换'language_change_path',例如。 'password_reset_path'它显示页面甚至处理提交。

感谢您的治疗

1 个答案:

答案 0 :(得分:1)

您可能需要在routes.rb中更改此行:

resources :language_change, :only => [:create, :new]

到此:

resource :language_change, :only => [:create, :new]

否则,帮助方法language_change_path期望链接到LanguageChange的特定实例。通过将资源指定为单数,您不需要将实例传递给帮助程序,因为它只需要存在一个这样的实例。

我猜你的password_reset资源也是单数。