我已经被困在下面的代码中好几天了。任务是通过一个页面中的表单(可能超过一百行)更新数据库表中的多个行。我在网上搜索并学习了如何使用'[]'从这个博客中获取表格中的数组:http://www.randomsnippets.com/2008/02/21/how-to-dynamically-add-form-elements-via-javascript/,但我的问题是我不知道如何将数组传递给我的ruby代码。谁能帮助我?谢谢! 这是主要的ruby文件(main.rb):
require 'sinatra'
require 'data_mapper'
DataMapper.setup(:default, 'mysql://user:password@hostname/database')
class Check
include DataMapper::Resource
property :id, Serial
property :answer, String
end
DataMapper.finalize.auto_upgrade!
get '/' do
@checks = Check.all :order => :id.asc, :limit => 5
erb :home
end
put '/update' do
n = Check.get params[:id1]
n.answer = params[:answer1]
n.save
n = Check.get params[:id2]
n.answer = params[:answer2]
n.save
n = Check.get params[:id3]
n.answer = params[:answer3]
n.save
n = Check.get params[:id4]
n.answer = params[:answer4]
n.save
n = Check.get params[:id5]
n.answer = params[:answer5]
n.save
redirect '/'
end
这是嵌入的home.erb文件,它位于views目录中:
<% i=0 %>
<form action="/update" method="post" id="edit">
<% @checks.each do |check| %>
<%= check.id %>
<% i = i + 1 %>
<input type="hidden" name="_method" value="put">
<input type="hidden" name="id<%= i %>" value="<%= check.id %>" />
<input type="text" name="answer<%= i %>" value="<%= check.answer %>" />
<p>
<% end %>
<input type="submit" value="update"></p>
</form>
数组样式home.erb可能是这样的:
<form action="/update" method="post" id="edit">
<% @checks.each do |check| %>
<input type="hidden" name="_method" value="put">
<input type="hidden" name="myid[]" value="<%= check.id %>" />
<input type="text" name="myanswer[]" value="<%= check.answer %>" />
<p>
<% end %>
<input type="submit" value="update"></p>
</form>
答案 0 :(得分:0)
你可能以错误的方式看待这个问题。您不经常在包含数百行的网页上看到表单,因此可能需要重新考虑您的用户界面 - 以帮助您和用户。
话虽如此,我认为你可以使用你所拥有的东西。你完成了大部分工作。只需更改路线代码,使其看起来像这样?
put '/update' do
i = 1
while params["id#{i}".to_sym]
id = "id#{i}".to_sym
answer = "answer#{i}".to_sym
n = Check.get params[id]
n.answer = params[answer]
n.save
i += 1
end
redirect '/'
end
我们现在正在循环中构建它们,而不是硬编码:id1
,:answer1
等。当params[:id432]
或其他任何内容丢失时,循环停止。
(注意:这不是解决这个问题的非常好的方式。我可能会使用更短的东西 - 将params
变成一个哈希数组,也许 - 你可以,我想,理解会有更多问题吗?)