Rails Insights

Sut i Ddefnyddio Scopes yn ActiveRecord Rails

Mae ActiveRecord yn un o'r elfennau mwyaf pwerus o Rails, gan ei fod yn darparu ffordd hawdd o weithio gyda'r cronfeydd data. Un o'r nodweddion mwyaf defnyddiol yw'r "scopes", sy'n caniatáu i chi greu ymholiadau a allai gael eu hailddefnyddio yn eich cais. Yn yr erthygl hon, byddwn yn archwilio sut i ddefnyddio scopes yn ActiveRecord, gan gynnwys enghreifftiau a phwyntiau pwysig i'w hystyried.

Beth yw Scope?

Mae scope yn ffordd o ddiffinio ymholiad a allai gael ei ddefnyddio yn aml yn eich cais. Mae'n caniatáu i chi greu methodau sy'n dychwelyd set o gofrestriadau yn seiliedig ar feini prawf penodol. Mae hyn yn gwneud eich cod yn fwy darllenadwy ac yn lleihau'r posibilrwydd o gamgymeriadau.

Creu Scope

I greu scope, gallwch ddefnyddio'r dull scope yn eich model. Dyma enghraifft syml:

class Product < ApplicationRecord
  scope :available, -> { where(available: true) }
end

Yn yr enghraifft hon, rydym wedi creu scope o'r enw available sy'n dychwelyd pob cynnyrch sydd ar gael. Gallwch ei ddefnyddio fel hyn:

Product.available

Defnyddio Scopes gyda Paramau

Gallwch hefyd greu scopes sy'n derbyn paramau. Mae hyn yn caniatáu i chi wneud ymholiadau mwy penodol. Dyma enghraifft:

class Product < ApplicationRecord
  scope :by_category, ->(category) { where(category: category) }
end

Yn yr enghraifft hon, rydym wedi creu scope o'r enw by_category sy'n derbyn un param, sef category. Gallwch ei ddefnyddio fel hyn:

Product.by_category('Electronics')

Defnyddio Scopes gyda Chydweithrediadau

Gallwch hefyd ddefnyddio scopes gyda chydweithrediadau. Mae hyn yn caniatáu i chi greu ymholiadau mwy cymhleth. Dyma enghraifft:

class Order < ApplicationRecord
  has_many :products

  scope :with_products, -> { includes(:products) }
end

Yn yr enghraifft hon, rydym wedi creu scope o'r enw with_products sy'n cynnwys y cynhyrchion sy'n gysylltiedig â'r gorchymyn. Gallwch ei ddefnyddio fel hyn:

Order.with_products

Defnyddio Scopes gyda Chyfyngiadau

Gallwch hefyd ddefnyddio scopes gyda chyfyngiadau. Mae hyn yn caniatáu i chi greu ymholiadau sy'n dychwelyd set benodol o gofrestriadau. Dyma enghraifft:

class Product < ApplicationRecord
  scope :recent, -> { where('created_at >= ?', 1.week.ago) }
end

Yn yr enghraifft hon, rydym wedi creu scope o'r enw recent sy'n dychwelyd pob cynnyrch a grëwyd yn ystod y wythnos ddiwethaf. Gallwch ei ddefnyddio fel hyn:

Product.recent

Defnyddio Scopes gyda Chymysgeddau

Gallwch hefyd ddefnyddio scopes gyda chymysgeddau. Mae hyn yn caniatáu i chi greu ymholiadau sy'n cyfuno sawl scope. Dyma enghraifft:

class Product < ApplicationRecord
  scope :available, -> { where(available: true) }
  scope :recent, -> { where('created_at >= ?', 1.week.ago) }
end

Gallwch ddefnyddio'r ddau scope gyda'i gilydd fel hyn:

Product.available.recent

Pwysigrwydd Scopes

Mae defnyddio scopes yn ActiveRecord yn cynnig nifer o fanteision:

  • Darllenadwyedd: Mae scopes yn gwneud eich cod yn haws i'w ddarllen a'i ddeall.
  • Ail-ddefnyddio: Gallwch ddefnyddio'r un scope sawl gwaith yn eich cais, gan leihau'r angen am ailysgrifennu cod.
  • Gwell Cynnal a Chadw: Mae'n haws cynnal a chadw cod sy'n defnyddio scopes, gan ei fod yn fwy strwythuredig.

Casgliad

Mae scopes yn nodwedd pwerus yn ActiveRecord sy'n eich galluogi i greu ymholiadau sy'n hawdd eu defnyddio a'u hailddefnyddio. Trwy ddefnyddio scopes, gallwch wella darllenadwyedd eich cod, lleihau'r posibilrwydd o gamgymeriadau, a gwneud eich cais yn haws i'w gynnal a'i gadw. Mae'r enghreifftiau a'r technegau a drafodwyd yn yr erthygl hon yn cynnig sylfaen gadarn ar gyfer dechrau defnyddio scopes yn eich prosiectau Rails.

Felly, peidiwch ag oedi! Dechreuwch ddefnyddio scopes yn eich modelau ActiveRecord heddiw a mwynhewch y manteision a ddaw gyda nhw.

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.