如何在 ruby​​ on Rails 中获取复选框值

gus*_*son 2 checkbox ruby-on-rails ruby-on-rails-5.1

我想要获取复选框值,以便将 http 请求的参数设置为 Restful API。我是 Web 开发新手,在使用 ruby​​ on Rails 5.1 时遇到问题

基本上,我有两个视图: - 在一个视图中,您可以选中/取消选中两个复选框,然后按下一个按钮,该按钮会进行一些 API 调用并将您发送到第二个视图。- 第二个仅用于显示 API 信息。

在第一个视图中,我成功执行了“进行”API 调用的按钮,并且在第二个视图中 API 信息正确显示。我现在无法通过两个复选框向请求添加参数。我的复选框总是在 params[] 中返回“nil”。

我参考了 Rails 文档的这一部分: https: //guides.rubyonrails.org/form_helpers.html#helpers-for-generate-form-elements 以及其他几个 stackoverflow 问题,但不明白我错过了什么。

这是控制器代码:

class IndexController < ApplicationController
  include HTTParty

  def button_state
  end

  def display_state
    require 'open-uri'
    require 'json'

    # this part is for checking my checkbox values, they are always nil

    @t1 =  params[:param_name1]
    @t2 =  params[:param_name2]
    @url_test = 'www.bkbahbqiv.com/tamere?test1=' << @t1.to_s << '&test2=' << @t2.to_s

    # other part related to the API calls
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

这是我的视图代码:

<h1>Check/Uncheck the boxes and click on the button to get results</h1>
<div class="checkbox">
  <td>
  <%= label_tag(:param_name1, "test1") %>
  <%= check_box_tag(:param_name1) %>
  </td>
</div>
<div class="checkbox">
  <td>
  <%= label_tag(:param_name2, "test2") %>
  <%=  check_box_tag(:param_name2) %>
  </td>
</div>

<%= button_to "go to display_state", display_state_path, :method => :get %>
Run Code Online (Sandbox Code Playgroud)

我只想补充一点,我不想将复选框值存储在数据库中。

预先感谢任何帮助我的人:)

Moh*_*waz 6

下面的建议绝对适合你。请更改您的视图,您需要使用以下内容来形成问题解决方案的标签

<%= form_tag display_state_path, :method => 'get' do %>
  <div class="checkbox">
    <td>
      <%= label_tag(:param_name1, "test1") %>
      <%= check_box 'param_name1', 'result', {}, 1, 0 %>
    </td>
  </div>
  <div class="checkbox">
    <td>
      <%= label_tag(:param_name2, "test2") %>
      <%= check_box 'param_name2', 'result', {}, 1, 0 %>
    </td>
  </div>
  <%= submit_tag "go to display_state" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

您可以访问参数中的复选框值

params[:param_name1][:result]
params[:param_name2][:result]
Run Code Online (Sandbox Code Playgroud)