2016-01-15 25 views
1

我想用Rails 4做一個應用程序。我使用簡單的表單。Rails 4,簡單的表單 - 語言選擇

我有一個表單讓用戶選擇他們的工作語言。

<%= f.input :working_languages, as: :select, collection: AVAILABLE_LANGUAGES.sort.map {|k,v| [v,k]}, label: "Select your working language" %> 

我也有一個available_languages.rb在我的配置/初始化文件夾

AVAILABLE_LANGUAGES = { 
    en: "English", 
    de: "Deutsche", 
    fr: "Français", 
    es: "Español" 
} 

當我嘗試,我得到這個錯誤。有誰知道它是什麼意思?

NameError in Profiles#edit 
profiles/_form.html.erb where line #39 raised: 

uninitialized constant ActionView::CompiledTemplates::AVAILABLE_LANGUAGES 
+0

能否請您粘貼完整的代碼爲您available_languages.rb –

+0

這是整個文件 – Mel

回答

3

配置/初始化/ language_array.rb

module LanguageArray 
    AVAILABLE_LANGUAGES = { 
    en: "English", 
    de: "Deutsche", 
    fr: "Français", 
    es: "Español" 
} 
end 

,並如下面的表格訪問:

<%= f.input :working_languages, as: :select, collection: LanguageArray::AVAILABLE_LANGUAGES.sort.map {|k,v| [v,k]}, label: "Select your working language" %> 
+0

未初始化的常量::的ActionView :: CompiledTemplates LanguageArray – Mel

+0

這種嘗試給出了這樣的錯誤 – Mel

+0

您是否重新啓動服務器? –

0

一個更好的辦法,是把在一個輔助& use this for your constant(這是你的看法):

#config/initializers/global_constants.rb 
module GlobalConstants 
    # also notice the call to 'freeze' 
    LANGUAGES = { 
     en: "English", 
     de: "Deutsche", 
     fr: "Français", 
     es: "Español" 
    }.freeze 
end 

#app/helpers/application_helper.rb 
module ApplicationHelper 
    def available_languages 
     GlobalConstants::LANGUAGES 
    end 
end 

那麼你可以使用:

<%= f.collection_select :working_languages, available_languages, :first, :last, label: "Select your working language" %> 
+0

Hi Rich,恐怕我沒有猜測爲什麼這會更好。我認爲你的技能可能比我能跟上的更進步。讀了這個:https://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/39-ruby-s-object-model/lessons/132-cloning-and-freezing-objects,我'我不知道爲什麼我想凍結用戶的語言選項。我擔心,我不認爲這種方法的優勢可能是什麼。無論如何感謝 - 我會跟我得到的。 – Mel

+0

你正在凍結常量。我只從參考答案中獲得了這個想法;我認爲這很好。常量不能改變,變量可以。因此,如果你要聲明一個常量,那麼無論如何你都不能改變它。 –

+0

真的不知道這是什麼意思。我認爲你對我來說太過先進,無法理解這一點。我不介意用戶是否改變他們選擇的語言,如果這就是你所指的。不管怎麼說,還是要謝謝你。 – Mel