2013-11-27 3 views
0

Я следующий код Haml в index.hamlНе удается передать параметры в контроллер

%h1.content-header{id: 'content-header'} HEADER 
%section.form 
    %form.standard{action: some_path, method: 'get'} 
    %fieldset.search{'aria-labelledby' => 'content-header'} 
     %input{type: 'search', name: 'name', placeholder: 'something', role: 'textbox'} -----(6) 
    %fieldset.input-actions 
     %input.primary-action{type: 'submit', value: 'search' , name: 'invokeSearch'} 

У меня есть следующие в моем контроллере

def index  
    Rails.logger.debug "#{params[:name]}" 
    unless @invalid_characters 
     unless params[:name].blank? 
     .... 
     .... 
     .... 

Вопрос в том, если я изменить название: «имя 'в строке 6, чтобы сказать имя:' test '.... params[:test] всегда пуст в моем контроллере. Но если я использую имя: 'name', params [: name], похоже, сработает. Не знаю, что я делаю неправильно здесь

+0

Вы пробовали 'render text: params.inspect и return' вместо того, чтобы просто отлаживать один ключ из' params'? Может быть, вы изменили файл, но забыл перезагрузить страницу? Вы сделали «просмотр источника» в своем браузере, чтобы убедиться, что поле ввода изменилось в разметке? –

+0

попробовал, что и имя похоже на тест ... –

+0

Итак, вы получили ситуацию, когда params.inspect показывает ключ 'test', но params [: test] пуст? –

ответ

0

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

= forms_for @thing do |f| 
    = f.text_field :name 
    = f.text_field :test 
    = f.submit 

В этом случае будет отображаться карта экземпляра модели в карте params. Что-то вроде

params[:thing][:name] 

или

params[:thing][:test] 

вы можете взять эту карту и передать ее в модель, чтобы создать или обновить его. Если вам не нужна жесткая связь с моделью, существует метод form_tag, который делает то же самое, за исключением того, что вам нужно быть более явным в том, какое значение имеет место. И поля попадают непосредственно в params, а не в хэш-модели.

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

puts "params: #{params.inspec}" 

или установить Поддеть, чтобы установить точку останова с

binding pry 

Некоторые идеи. Надеюсь, что это работает для вас. Я думаю, вы должны начать с попытки использовать помощников рельсов, и это, вероятно, будет само собой.

Смежные вопросы