Aşağıdaki kodda birkaç gün boyunca sıkışmış durumdayım. Görev, bir tablodaki birden çok satırı tek bir sayfada (belki yüz satırın üzerinde) formla güncellemektir. Web'de arama yaptım ve bu blogun formunda bir dizi almak için '[]' kullanmayı öğrendim: http://www.randomsnippets.com/2008/02/21/how-to-dynamically-add-form-elements-via-javascript/, ama benim sorunum, dizilerimin ruby koduma nasıl geçeceğini bilmiyorum. Biri bana yardım edebilir mi? Teşekkürler! Belki de bu kadarBir formdan bir diziden Sinatra ve Datamapper ile bir veritabanına nasıl geçebilirim?
<% 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>
dizi stil home.erb:
require 'sinatra'
require 'data_mapper'
DataMapper.setup(:default, 'mysql://user:[email protected]/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
Burada görünümler dizinde bulunan gömülmüş home.erb dosyasıdır: Burada ana yakut dosyası (main.rb) 'dir:
<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>
Teşekkürler Andy! Gerçekten çalışıyor! Aslında, kodu aritmetikte 100 sorun içeren bir alıştırma sayfasında kullanacağım. Bunu yapmanın basit bir yolu olduğunu düşünüyorum. –