2012-02-11 94 views
1

我试图从下拉菜单中更改我的应用程序的语言,然后是提交按钮。 我介绍了一个名为在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'它显示页面,甚至处理提交。

感谢您helage

回答

1

你可能需要改变这一行中routes.rb

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

这样:

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

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

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

+0

谢谢布兰登!我现在的工作,但我不得不复数也是我的控制器的名称等。很高兴知道。现在我不得不进一步深入探讨ruby的plurialization的奥秘;-) – microcosme 2012-02-12 15:23:16

+0

很高兴提供帮助。请确保接受答案,如果它是正确的。 – Brandan 2012-02-13 04:23:09