将html输入转换为rails函数

时间:2012-11-03 17:23:41

标签: javascript ruby-on-rails-3

我有一个像这样的HTML:

    <div class="row well">
      <form method="POST">
        <ol id="velArea">
          <li>  Layer velocity: (m/s) <input type="text" name="source[]"> </li>
        </ol>
        <input type="button" value="Add another layer" name="velocity" onClick="addVel('velArea');">
      </form>
    </div>

和一个将html添加到区域的javascript函数

    function addVel(area)
    {
      var field_area = document.getElementById(area);
      field_area.innerHTML += "<li>  Layer velocity: (m/s) <input type='text' name='velocity'> <a style='cursor:pointer;color:grey;' onclick='this.parentNode.parentNode.removeChild(this.parentNode);''>delete</a> </li>";
    }

我需要读取rails函数中每个输入字段的值。并且不知道如何做到这一点。我已经失去了在rails中通过活动模型的日子,认为这是直到我最终想出的方式,最好是保持浏览器相关和服务器相关的事情分开。所以我学了一点javascript并做了一些功能。是的,我是网络开发的新手。我正在使用rails 3.2。

我想要使用字段信息的函数由按钮调用:

     <%= button_to "Run single inversion", {:action => "my_func", }, {:remote => true, :form => { "data-type" => "json" }, :class => "btn btn-primary"} %>

并且控制器上的功能是:

    def my_func
      render :nothing => true
      vel = params[:velocity]
      puts vel.class
      puts 'Hi'
    end

我得到的输出是

    NilClass
    Hi

所以我显然没有正确地传递论据。我猜我在使用button_to时需要在post方法中传递速度数组,但不知道如何做到这一点。

另外,我需要输入的值,而不是任何面向数据库的值,因此我无法使用activeRecord属性查找它。

2 个答案:

答案 0 :(得分:1)

在rails控制器中,当javascript将表单提交到您需要的任何方法时,您应该能够访问params[:model_name]。您还可以访问params[:id]params[:firstname]

我对你正在做的事情也有点困惑 <input type='text'> </input>

没有name属性,模型需要该属性来标识它并将其值与列相关联。它也不是正确的输入方式。

<input type="text" name="column_name"/>

更接近你想要的东西

答案 1 :(得分:1)

我不确定为什么你的代码如此复杂。但基本上有一些东西,不是RailsWay。首先,您应该查看Rails Form Helpers。如果您使用约定,您将收到如下的params哈希:

params[:velocities][:velocity]
params[:velocities][:source]

表单标记如下所示:

<input type="text" name="velocities[velocity]" id="velocities_velocity" value="">
<input type="text" name="velocities[source]" id="velocities_source" value="">

在上面的代码中,您期望获得vel的值。得到的NilClass是因为para是[:velocity]的nil,所以vel是零。您应该检查以下内容:

puts params.inspect

或者在运行Rails应用程序时查看日志。

请重新检查按钮和输入字段的名称属性。它们的名称属性都是“速度”。如果按钮是提交的后者,那么params [:velocity]的值肯定是空的......