2012-02-11 33 views
1

私のアプリケーションの言語をドロップダウンメニューから送信ボタンに変更しようとしました。コントローラに最後にリソースにパス変数が定義されていません

<%= 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 %> 

:ビューhome.html.erbで

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

が、私はそれをこのように置く: 私はとroute.rbで定義された「language_change」という名前のコントローラを導入しました私は置く:

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

私は、次のエラーメッセージを取得するホーム・ページをロードするとき

誰かが何が間違っているか教えていただけますか? 私が理解していないのは、ビューの中で、アプリケーションの他の場所で定義された別のコントローラ、例えば 'language_change_path'を置き換えるときです。 'password_reset_path'はページを表示し、送信を処理します。あなたはおそらくroutes.rbにこの行を変更する必要があなたのhelage

答えて

1

ため

ありがとう:

これに
resources :language_change, :only => [:create, :new] 

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

そうでない場合は、ヘルパーメソッドlanguage_change_pathは、特定のインスタンスを期待していますにリンクするLanguageChangeの単数型としてリソースを指定することにより、そのインスタンスが1つしか存在しないため、インスタンスをヘルパーに渡す必要はありません。

私はあなたのpassword_resetリソースが単数であると推測しています。

+0

ありがとうBrandan!私は今働いていますが、コントローラの名前なども複数形にしなければなりませんでした。今私はルビの多重化の謎に少し詳しく掘り下げなければならない;-) – microcosme

+0

喜んで助けてください。正しい答えがあればそれを受け入れてください。 – Brandan

関連する問題