form_tag

时间:2016-01-29 14:15:51

标签: ruby-on-rails forms

我有一个表单标记,可用作搜索表单。 我有一组位置 - params:name和id,我在表单标签中显示为收集盒。搜索标签显示可以添加到项目中的每个位置的人员。通过选择表单标记上的位置,您可以过滤掉特定位置的人员。

搜索表单工作正常,并且正确地给了我每个位置的人

以下是视图中的内容

<%= collection_check_boxes(@locations, :location_ids, @locations.all, :id, :name) %><br> 

以下是包含在其中的表单标记:

<%= form_tag interviewers_tenant_project_path(@project, tenant_id: @tenant.id), method: :get do %>

位置是特定于项目的,我正在创建一个实例变量来返回对项目有效的所有位置。

我的问题是,在表单返回数据后,不会勾选先前选中的位置复选框。

这是控制器中的代码

    @locations = Location.where("name in (?)", project_locations)

    @locations.each do |loc|
      puts "loc.name #{loc.name}, #{loc.id}"
      def loc.location_ids
        [1]
      end
    end


    def @locations.location_ids
      puts "ENTER @locations.location_ids "

      #location_values
      [1]
    end

文档说明了这一点:

collection_check_boxes(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block)

“返回对象类的方法的现有返回值集合的复选框标记。将选择从实例对象上的调用方法返回的值。如果调用方法返回nil,则不进行选择。”

所以我尝试向对象添加一个方法(单例方法),然后当它不起作用时,我尝试向每个活动记录实例添加一个方法。 我已经硬编码了值[1] - 它对应于我数据库中的第一个位置。但是,在搜索后重新呈现表单时,我无法选中复选框。

我是铁杆新手 - 大约2个月进入我的项目 - 在那之前一个月研究RoR,所以所有的见解都是有益的。

感谢您的帮助和时间

1 个答案:

答案 0 :(得分:1)

我终于解决了这个问题。我不想重写控制器。所以我尝试将复选框的名称调整为与集合标记生成的名称相同的名称。我还添加了3行代码,从&lt;%param开始...这帮助我调试了正确的值。我猜铁路专家会称它为丑陋的黑客......?无论如何,复选框工作正常,我没有触及控制器代码。

<?php
    $db_host = "localhost";
    $db_user = "root";
    $db_pass = "root";
    $db_name  = "testdb";
    // connection:
    $mysqli = new mysqli($db_host, $db_user, $db_pass , $db_name);
    // tjek conenction:
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
    }

    // vi kører utf-8 på connection:
    $mysqli->set_charset("utf-8");  
?>