Raylar açıklandı mı?


228

paramsRails kontrol cihazında kimse açıklayabilir mi : nereden geliyorlar ve neye atıfta bulunuyorlar?

  def create
    @vote = Vote.new(params[:vote])
    item = params[:vote][:item_id]
    uid = params[:vote][:user_id]
    @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
    last_vote_time = @extant.created_at unless @extant.blank?
    curr_time = Time.now
  end

Bu kodu satır satır okumak ve neler olup bittiğini anlamak istiyorum.


2
Sunucu tarafı web geliştirme konusundaki geçmişiniz nedir? Zaten hangi teknolojileri biliyorsunuz?
Maurício Linhares

3
Yıllardır HTML ve CSS ile birlikteyim. PHP, JS ve Java kullanan sınıflar alındı. Php ile çok az MVC kullanılır. Java kullanarak programlamayı gerçekten öğrendim. Ve veritabanı teorisini iyice anlıyorum.
Dru

Yanıtlar:


281

Parametreler, sayfayı istediklerinde kullanıcının tarayıcısından gelir. En yaygın olan HTTP GET isteği için, parametreler url'de kodlanır. Örneğin, bir kullanıcının tarayıcısı istenirse

http://www.example.com/?foo=1&boo=octopus

sonra params[:foo]"1" ve params[:boo]"ahtapot" olur.

HTTP / HTML'de, parametreler gerçekten sadece anahtar ve değerin dizeler olduğu bir anahtar / değer çiftleri dizisidir, ancak Ruby on Rails, parametrelerin içinde karma içeren bir karma olması için özel bir sözdizimine sahiptir. Örneğin, kullanıcının tarayıcısı isterse

http://www.example.com/?vote[item_id]=1&vote[user_id]=2

sonra params[:vote]bir karma olur, params[:vote][:item_id]"1" ve params[:vote][:user_id]"2" olur.

Ruby on Rails parametreleri, PHP'deki $ _REQUEST dizisinin eşdeğeridir .


13
$ _REQUEST, get, post ve çerez verilerini içermesi dışında $ _REQUEST ile eşdeğerdir, paramler ise yalnızca get ve post verilerini içerir.
Parziphal

3
@renocor POST verileri Rails paramskarmasına da dahildir . Çerez verileri sessionkarmaya dahil edilir .
Richard Jones

Bu cevap başka bir parametre kaynağı daha bırakıyor: URL. Daha fazla bilgi için hammar'ın cevabına bakınız.
Richard Jones

1
toasterlovin, cevabımın ikinci cümlesini okumadığınız veya ilk örneğe bakmadığınız anlaşılıyor.
David Grayson

1
@AnkitDhingra ... HTTP params gerçekten sadece anahtar / değer çifti ve Rails (büyük olasılıkla Rack gem) anahtar değerine göre hashes ve diziler ayrıştırır gibi her zaman dize olacağını düşünüyorum, ama ben tür bir şey görmedim Rails değerine bir sayı olduğunu söyler.
rubyprince

75

Diğerlerinin de belirttiği gibi, paramsdeğerler bir GET isteğinin sorgu dizesinden veya bir POST isteğinin form verilerinden gelebilir, ancak gelebilecekleri üçüncü bir yer de vardır: URL'nin yolu.

Bildiğiniz gibi, Rails, istekleri ilgili denetleyici eylemlerine yönlendirmek için yollar adı verilen bir şey kullanır. Bu rotalar, URL'den çıkarılan ve içine yerleştirilen segmentler içerebilir params. Örneğin, böyle bir rotanız varsa:

match 'products/:id', ...

Sonra böyle bir URL'ye bir istek http://example.com/products/42irade seti params[:id]için 42.


Nasıl ikinci bir param elde edersiniz? like / squad / id / member / id / stuff
weteamsteve 09

48

Parametreler aşağıdaki üç parametre grubunu içerir:

  1. Kullanıcı tarafından sağlanan parametreler
    • GET (http://domain.com/url?param1=value1¶m2=value2 params [: param1] ve params [: param2]) ayarlayacaktır
    • POST (örn. JSON, XML otomatik olarak ayrıştırılır ve parametrelerde saklanır)
    • Not: Varsayılan olarak, Rails kullanıcı tarafından sağlanan parametreleri çoğaltır ve Parametreler [: user] içinde saklar. UsersController ise wrap_parameters ayarı ile değiştirilebilir
  2. Yönlendirme parametreleri
    • match '/user/:id' route.rb içinde params [: id] ayarlayacaktır
  3. Varsayılan parametreler
    • params[:controller]ve params[:action]her zaman kullanılabilir ve geçerli denetleyiciyi ve eylemi içerir

1
Notunuzu User supplied parametersbiraz daha genişletebilir misiniz ? Örneğin, UsersController'daki params karma örneğine yardımcı olabilirsiniz. Örneğiniz, karma gibi görünecek şekilde ses çıkarır: {first_name: "mike", user: {first_name: "mike"} ...} Bu doğru mu?
7stud

1
Bunu raylarda görmüyorum4. Örneğin {"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"},. Yanılıyorsam beni affet, ben bir ray acemiyim. Notunuza göre şunu görmeliyim: {"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"} Bunun raylarda4 güçlü parametrelerle ilgili olup olmadığını bilmiyorum.
7stud

2
Rails 4 yinelenen params görüyorum, ama sadece json POST istekleri (Angularjs kullanarak) altında Rails kendi HTML mesajları altında görüyorum. Bu bağlantı nedenini açıklıyor: stackoverflow.com/questions/10774972/…
Homan

13

Temel olarak, parametreler raylar uygulamasında kullanıcı tarafından belirlenen verilerdir.

Bir form yayınladığınızda, genellikle GET isteğinin aksine POST isteğiyle yaparsınız. Siteye göz atarken, normal ray isteklerini GET istekleri olarak düşünebilirsiniz.

Bir form gönderdiğinizde, denetim uygulamaya geri atılır. Forma gönderdiğiniz değerleri nasıl elde edersiniz? paramsgösteririm.

Kodunuz hakkında. @vote = Vote.new params[:vote]params verilerini kullanarak yeni bir Oylama oluşturur [: vote]. Gönderilen form kullanıcınızın adı: oy adı verildiğinde, tüm verileri bu: karmanın oy alanındadır.

Sonraki iki satır, öğeyi almak için kullanılır ve kullanıcı kimliği forma göndermiştir.

@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])

item_id = item ve user_id = uid koşullarıyla veritabanından en yeni veya son eklenen oyu bulur.

Sonraki satırlar son oylama zamanını ve geçerli zamanı alır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.