2016-04-07 21 views
1

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> 

cevap

0

Bu yanlış yöne bakıyorsunuzdur. Web sayfalarındaki formları genellikle yüzlerce satırda görmüyorsunuz. Bu nedenle, kullanıcı arayüzünüzün yeniden gözden geçirilmesi, sizin ve kullanıcının her ikisine de yardımcı olmak için sırayla olabilir.

Bunu söyledikten sonra, sahip olduğunuzla çalışabileceğinizi düşünüyorum. İşin çoğunu yaptın. Sadece yol kodunu değiştir, böylece böyle bir şey görüyor mu?

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 

yerine

sabit kodlama :id1, :answer1, vs, şimdi bir döngü içinde bunları inşa ediyoruz. params[:id432] veya eksik olan her şey olduğunda, döngü durur.

(Not: Bu sorunu çözme korkunç Yakut-imsi yol değildir muhtemelen daha kısa bir şey kendim kullanırım - var, ben düşünebilir - belki, karma bir diziye params dönüm. daha fazla sorun anlama?)

+0

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. –