我有一个像这样的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属性查找它。
答案 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]的值肯定是空的......