【问题标题】:How do I pass a variable from view to controller in Ruby on Rails?如何在 Ruby on Rails 中将变量从视图传递到控制器?
【发布时间】:2012-03-07 18:55:55
【问题描述】:

这是我的 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

在我的 routes.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"}
在 4 毫秒内完成 500 内部服务器错误

NoMethodError(你没想到的是一个 nil 对象!
您可能期望有一个 Array 实例。
评估 nil 时发生错误。[]):
app/controllers/port_testing_controller.rb:7:in `test'

渲染的 vendor/bundle/jruby/1.9/gems/actionpack-3.1.2/lib/action_dispatch/middl eware/templates/rescues/_trace.erb (6.0ms)
渲染的 vendor/bundle/jruby/1.9/gems/actionpack-3.1.2/lib/action_dispatch/middl eware/templates/rescues/_request_and_response.erb (3.0ms)
渲染的 vendor/bundle/jruby/1.9/gems/actionpack-3.1.2/lib/action_dispatch/middl 救援/布局中的 eware/templates/rescues/diagnostics.erb (155.0ms)

如何将哪些复选框与文本字段中输入的内容一起检查到控制器?

【问题讨论】:

  • @fl00r 你能说得更具体点吗?
  • puts @params["hostname"] 转换为puts params["hostname"]
  • @fl00r 谢谢!那行得通。我如何将我的 check_box 状态存储在 params 变量中,以便我可以在我的控制器中获取状态?

标签: ruby-on-rails haml


【解决方案1】:

Rails 中的params 变量不是实例变量,所以你的控制器方法应该这样写:

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

【讨论】:

  • 谢谢!那行得通。我如何将我的 check_box 状态存储在 params 变量中,以便我可以在我的控制器中获取状态?
  • params 是表单发送给控制器的所有内容的哈希值。尝试在控制器中执行puts params 以查看复选框的存储内容。
  • 当我做puts params 时,只有选中的checkbxes 在哈希中。我可以做一个解决方法,但最好在 params 哈希中包含所有复选框,而不仅仅是选中的复选框。
  • 老实说,我认为与Rails 无关。我认为浏览器不会提交未选中的复选框。
【解决方案2】:

我知道我做到了..你可以通过循环放置所有参数..这样做..我敢打赌你的价值已经在那里了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多