Saya bertanya-tanya bagaimana hal berikut ini dilakukan di Rails 4 atau jika saya hanya menggunakan pendekatan Rails 3 untuk menggunakan lambda yang dapat memberikan argumen dengan cara yang sama dengan 4 seperti yang saya lakukan dengan 3.
Saya cukup baru untuk Rails 3 dan mencoba untuk mengerjakan beberapa sampel menjalankan Rails 4.
Ini kode Rails 3 saya:
class Person < ActiveRecord::Base
scope :find_lazy, lambda {|id| where(:id => id)}
end
# In console I can call
Person.find_lazy(1)
Jadi jika ini adalah cara Rails 4 adalah dengan menggunakan -> {}, itu lambda, kan? scope :all_lazy, -> { select("*") }
Bagaimana jika saya membutuhkan argumen. Saya mencoba beberapa ide berbeda dan mendapatkan kesalahan argumen di konsol saat menggunakan -> {}.
scope :in_daterange, ->(start_date, end_date) { where(created_at: start_date.to_date.beginning_of_day..end_date.to_date.end_of_day) }
scope :find_lazy, ->(param)
). Di Ruby 2+, ruang diizinkan. Info lebih lanjut di sini ...scope :find_lazy, -> id { where id: id }
Ruby juga tidak meninggalkan gaya lambda yang lama, jadi jika Anda merasa lebih nyaman menggunakannya, silakan saja.
Secara pribadi saya tidak suka sintaks lambda yang stabby tetapi akhirnya mereka mungkin akan menjadi norma sehingga tidak ada salahnya untuk membiasakan diri dengan mereka.
sumber
Rails 4, Anda dapat melakukan:
Itu ada di batu delima tua:
Hash yang lebih baik:
sumber
cowok saya biasanya menggunakan sintaks pemrograman di bawah ini
Tetapi ketika saya meninjau kode saya menggunakan Codacy saya menemukan itu mengingatkan saya tentang sintaks ini
Saya mengubahnya menjadi dan berfungsi dengan baik
sumber
Untuk mendukung asosiasi:
sumber
setara dengan
Berdasarkan pedoman ruby on rails :
Using a class method is the preferred way to accept arguments for scopes.
Tidak ada alasan untuk menggunakan cakupan bersama dengan lambdas sebagai pilihan metode kelas. Ini adalah masalah pilihan pribadi. Tetapi, jika Anda ingin mengikuti panduan, Anda harus menggunakan metode kelas saat argumen terlibat.
sumber