Получение пользовательского ввода из формы выбора Rails - PullRequest
1 голос
/ 01 февраля 2011

Это относится к предыдущему вопросу , но я подумал, что было бы лучше разделить его для поиска позже.

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

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

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

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

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

def index
  @foo = FooModel.new
   respond_to do |format|
      format.html # index.html.erb
   end
end

def bar
    @events = params.inspect

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

Я пытался получить доступ к значению, которое должно быть передано через раскрывающееся меню, несколькими способами, но, похоже, оно не передается. Даже вызов params.inspect только устанавливает @events равным пустому хешу. Я подозреваю, что что-то не так с моим потоком, или меня называют неверно или что я называю неправильный период.

В настоящее время индекс - это то место, где живет представление ^^, и когда вы нажимаете на кнопку «Отправить», оно вызывает панель вызовов. Нужно ли передавать переменную по-другому? Спасибо.

Обновление Возможно, это ведет. Я полагаю, что у меня есть понимание того, что происходит в модели и контроле, но что-то все еще беспокоит меня в представлении. В <% = select: range,: thing, FooModel :: MONTHS%> что на самом деле означает диапазон и вещь? Когда я читаю учебники и тому подобное, как могу лучше сказать, заполняйте html id и теги имен значениями, но больше ничего не знаю. Нужно ли их инициализировать где-нибудь? Они относятся к чему-то конкретному?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2011

Я попробовал это. Я также пытался сделать константный подход. Который работал только после того, как я изменил :month на имя столбца в БД, который был установлен в моем FooModel

После того, как я получил эту работу, я хотел переместить ее из файла constants.rb и поместить в модель. Даг был прав и сказал, что мы можем получить к нему доступ через FooModel::Months

Итак, мой окончательный код выглядит следующим образом в этом эксперименте;

Модель:

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

Вид:

<% form_for @foo, :url => {:action => 'bar'} do |f|%>
  <%= f.select :month, options_for_select(FooModel::MONTHS)  %>
  <%= f.submit "Submit", :disable_with => "Submitting..." %>
<% end %>

Контроллер:

def index
  @foo = FooModel.new
   respond_to do |format|
      format.html # index.html.erb
   end
end

def bar
    @events = params.inspect

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

В какой-то момент я мог видеть использование constant.rb для обычных вещей, таких как месяцы, страны и т. Д., Но для этого ограниченного эксперимента я хотел проверить это обоими способами. Если я использую constants.rb их, мой вид будет выглядеть следующим образом.

Просмотр при использовании constants.rb;

<% form_for @foo, :url => {:action => 'bar'} do |f|%>
  <%= f.select :month, options_for_select(MONTHS)  %>
  <%= f.submit "Submit", :disable_with => "Submitting..." %>
<% end %>

@ Гектор: надеюсь, это поможет.

1 голос
/ 01 февраля 2011

Для этого лучше использовать константу.

  1. в lib/initializers создайте файл с именем constants.rb или как хотите
  2. Затем добавьте свою константу, в вашем случаеMONTHS * см. Код ниже
  3. Затем вы можете получить доступ к этой константе в виде

В config/initializers/constants.rb:

MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep']

По вашему мнению:

<% form_for @foo, :url => {:action => 'bar'} do |f|%>
  <%= f.select :month, options_for_select(MONTHS)  %>
  <%= f.submit "Submit", :disable_with => "Submitting..." %>
<% end %>

options_for_select просто форматирует его для выбранного входа.

0 голосов
/ 02 февраля 2011

К сожалению, хотя мне и понравился ответ Сэма, и он действительно улучшил мой код, в конечном счете, он не стал ответом на мой вопрос.Довольно разочаровывающим ответом было то, что, на мой взгляд, у меня была строка отладки, которую я использовал, чтобы увидеть, какой вывод я получал после запуска элемента управления, и я печатал из неверной переменной.Простой контроль копирования / вставки.

...