Как передать переменную из представления в контроллер в Ruby on Rails? - PullRequest
1 голос
/ 07 марта 2012

Это мой index.html.haml:

= stylesheet_link_tag 'user'
.title
  %h1 Port Testing
  = form_tag('port_testing/test', method: 'get') do
    = text_field_tag :hostname, 'localhost', size: 50
    = check_box_tag('Port 80', '80')
    = label_tag('80')
    = check_box_tag('Port 443', '443')
    = label_tag('443')
    = check_box_tag('Port 28009', '28009')
    = label_tag('28009')
    = check_box_tag('Port 2195', '2195')
    = label_tag('2195')
    %button(type="submit") Test

В моем route.rb у меня есть это:

  match 'port_testing/test', :controller => :port_testing, :action=> :test

Это мой port_testing_controller.rb:

class PortTestingController < ApplicationController
  def index

  end
  def test
      puts "\n"
      puts @params["hostname"]
  end
end

Прямо сейчас, когда я нажимаю кнопку «Тест», я получаю это:

Запуск GET "/ port_testing / test? Utf8 =% E2% 9C% 93 & hostname = localhost" для 127.0.0.1
в 2012-03-07 13:51:33 -0500
Обработка PortTestingController # test как HTML
Параметры: {"utf8" => "G £ ô", "hostname" => "localhost"}
Выполнено 500 Внутренняя ошибка сервера в 4ms

NoMethodError (У вас есть нулевой объект, когда вы его не ожидали!
Возможно, вы ожидали экземпляр Array.
Произошла ошибка при оценке nil. []):
app / controllers / port_testing_controller.rb: 7: в `test '

Предоставленный поставщик / bundle / jruby / 1.9 / gems / actionpack-3.1.2 / lib / action_dispatch / middl eware / templates / rescues / _trace.erb (6.0ms)
Предоставленный поставщик / bundle / jruby / 1.9 / gems / actionpack-3.1.2 / lib / action_dispatch / middl eware / templates / rescues / _request_and_response.erb (3,0 мс)
Предоставленный поставщик / bundle / jruby / 1.9 / gems / actionpack-3.1.2 / lib / action_dispatch / middl eware / templates / rescues / Diagnics.erb в пределах rescues / layout (155.0ms)

Как передать контроллеру, какие флажки отмечены вместе с тем, что введено в текстовое поле?

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

Переменная params в Rails не является переменной экземпляра, поэтому ваш метод контроллера должен сказать:

def test
  puts "\n"
  puts params["hostname"]
end
0 голосов
/ 08 марта 2012

Я знаю, что сделал это ... вы можете поместить все параметры, просматривая их ... сделать это ... Готов поспорить, что ваша ценность уже там.

...