Adakah yang bisa menjelaskan params
dalam pengontrol Rails: dari mana asalnya, dan apa yang mereka rujuk?
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
Saya ingin dapat membaca kode ini baris demi baris dan memahami apa yang terjadi.
ruby-on-rails
ruby
Dru
sumber
sumber
Jawaban:
Params datang dari browser pengguna ketika mereka meminta halaman. Untuk permintaan HTTP GET, yang paling umum, params dikodekan dalam url. Misalnya, jika browser pengguna diminta
http://www.example.com/?foo=1&boo=octopus
maka
params[:foo]
akan menjadi "1" danparams[:boo]
akan menjadi "gurita".Dalam HTTP / HTML, params benar-benar hanya serangkaian pasangan nilai kunci di mana kunci dan nilainya adalah string, tetapi Ruby on Rails memiliki sintaks khusus untuk membuat params menjadi hash dengan hash di dalamnya. Misalnya, jika browser pengguna diminta
http://www.example.com/?vote[item_id[=1&vote[user_id[=2
maka
params[:vote]
akan menjadi hash,params[:vote][:item_id]
akan menjadi "1" danparams[:vote][:user_id]
akan menjadi "2".Params Ruby on Rails setara dengan array $ _REQUEST di PHP .
sumber
params
hash Rails juga. Data cookie termasuk dalamsession
hash.Seperti yang telah ditunjukkan orang lain,
params
nilai bisa berasal dari string kueri permintaan GET, atau data formulir dari permintaan POST, tetapi ada juga tempat ketiga dari mana mereka berasal: Jalur URL.Seperti yang mungkin Anda ketahui, Rails menggunakan sesuatu yang disebut rute untuk mengarahkan permintaan ke tindakan pengontrol yang sesuai. Rute ini dapat berisi segmen yang diekstrak dari URL dan dimasukkan ke dalam
params
. Misalnya, jika Anda memiliki rute seperti ini:Kemudian permintaan ke URL seperti
http://example.com/products/42
akan diaturparams[:id]
ke42
.sumber
Params berisi tiga grup parameter berikut:
match '/user/:id'
di routes.rb akan mengatur params [: id]params[:controller]
danparams[:action]
selalu tersedia dan berisi controller dan action saat inisumber
User supplied parameters
lebih sedikit? Misalnya, contoh hash params di UsersController akan sangat membantu. Contoh Anda membuatnya terdengar seperti hash akan terlihat seperti:{first_name: "mike", user: {first_name: "mike"} ...}
Apakah itu benar?{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}
,. Maafkan saya jika saya salah, saya pemula pemula. Menurut catatan Anda, saya harus melihat:{"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"}
Saya tidak tahu apakah itu ada hubungannya dengan parameter yang kuat di rails4 atau tidak.Pada dasarnya, parameter adalah data yang ditentukan pengguna untuk aplikasi rails.
Ketika Anda memposting suatu formulir, Anda melakukannya secara umum dengan permintaan POST, bukan permintaan GET. Anda dapat menganggap permintaan rel normal sebagai MENDAPATKAN permintaan, ketika Anda menelusuri situs, jika itu membantu.
Saat Anda mengirimkan formulir, kontrol dilemparkan kembali ke aplikasi. Bagaimana Anda mendapatkan nilai yang telah Anda kirimkan ke formulir?
params
adalah bagaimana.Tentang kode Anda.
@vote = Vote.new params[:vote]
membuat Vote to database baru menggunakan data params [: vote]. Mengingat formulir yang Anda kirimkan oleh pengguna diberi nama: suara, semua datanya ada di ini: bidang suara hash.Dua baris berikutnya digunakan untuk mendapatkan item dan pengguna uid telah mengirimkan ke formulir.
menemukan yang terbaru, atau yang terakhir disisipkan, memilih dari basis data dengan ketentuan item_id = item dan user_id = uid.
Baris berikutnya membutuhkan waktu pemungutan suara terakhir dan waktu saat ini.
sumber
Di sisi Rails,
params
adalah metode yang mengembalikanActionController::Parameters
objek. Lihat https://stackoverflow.com/a/44070358/5462485sumber
params
adalah metode. Ruby dapat mempersulit membedakan variabel dari metode