2011-01-31 3 views
1

Это действительно кажется достаточно простым, но по какой-то причине мне не хватает чего-то критического.Создание простого выпадающего меню в Rails

У меня есть мнение:

<% form_for :foo, @foo, :url => {:action => 'bar'} do |f|%> 
    <%= f.collection_select :range, FooModel::MONTHS%> 
    <%= submit_tag "Submit", :disable_with => "Submitting..." %> 
<% end %> 

У меня есть модель:

class FooModel < ActiveRecord::Base 
    MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'] 
end 

И у меня есть контроллер:

def new 
    @foo = FooModel.new 
end 

def index 
    respond_to do |format| 
    format.html # index.html.erb 
    end 
end 

def bar 
    if params[:foo] 
    @foos = params[:foo].inspect 
    end 

    respond_to do |format| 
    format.html # index.html.erb 
    end 
end 

Мой вопрос, как я могу получить в информация о том, какой элемент со списком был выбран при нажатии кнопки «Отправить»? Это не похоже на params [: foo], @foo или что-то еще, о чем я могу думать.

Обновление Глядя на него, похоже, я должен был бы назвать params [: range]? Это, однако, ноль.

ответ

2

Я думаю, что ваш код может быть упрощен, чтобы работать таким образом:

 
<% form_for @foo, :url => {:action => 'bar'} do |f| %> 
    <%= f.select :range, FooModel::MONTHS %> 
    <%= submit_tag "Submit", :disable_with => "Submitting..." %> 
<% end %> 

Использование collection_select для простых случаев, таких, как этот, вероятно, слишком много. f.select должно быть достаточно.

+0

Изменил это, теперь я получаю: undefined метод 'model_name 'для NilClass: Class в первой строке. – hector

+0

Этот код в вашем новом действии? Если нет, вы можете попробовать заменить @foo на FooModel.new. –

+0

Ах, ну, вам нужно, чтобы переместить это в нужное место. Теперь он говорит мне, что у меня есть неопределенный метод 'select_tag 'для # в строке f.select_tag – hector