Rails дээр хэрхэн Route ашиглах

work hard, rest well

zagdsuren.b
Unimedia Solutions
6 min readJun 18, 2020

--

Ruby On Rails

Энэ удаагийн бичлэгээс эхлээд ROR-ийн тухай бичлэгүүдээр цуврал болгон бичихээр шийдлээ. Анхан шатнаасаа илүүтэйгээр ахисан шатныхад илүү хэрэг болох мэдээллүүд оруулах болно.

Эхний сэдэв маань гарчиг дээр байгаачлан Route хэрхэн зохион байгуулах болон ашиглах талаар байх болно.

Rails Routing

Route гэдэг нь URL-аар дамжуулан програмын аль хэсгийн кодыг ажиллуулж үр дүнг буцаах вэ гэдгийг тохируулдаг хэсэг юм.

Энэхүү сэдвийн хүрээнд доорх хэсгүүдийг хэрхэн хэрэглэх болон давуу талуудыг таниулан бичихийг зорилоо.

  1. Resources болон resource
  2. Бие биедээ багтсан (nested) resources
  3. Namespace болон scope
  4. Root түүний Namespace доторх хэрэглээ
  5. Өөрчилсөн (custom) route

Resources болон resource

Rails дээр routing хийх үед resources эсвэл resource-ийг ашиглан үндсэн route зохион байгуулдаг.

Ажиллаж байгаа объект маань олон нэг төрлийн объекттой ажиллах бол resources, хэрэв ганц тодорхой объекттой ажиллах бол resource ашиглан зохион байгуулна.

Жишээ нь олон хэрэглэгчдийн мэдээлэл дээр ажиллах үед resources ашиглан route зохион байгуулна.

Users Controller дээр 7 action байна

Харин өөрийн (тогтсон ганц) мэдээлэл дээр ажиллах үед resource ашиглан route зохион байгуулна.

Users Controller дээр 6 action байна

Rails дээр 7-н үндсэн үйлдэл (action) байдаг. Энэхүү 7-н action нь өгөгдлийн сангийн CRUD (Create Read Update Delete) үйлдэл хийхэд зориулагдан загвар нь гарсан байдаг. Index үйлдэл нь resource дээр байдаггүй. Учир нь тодорхой ганц объект дээр ажиллаж байгаа тул жагсаалт харуулах action хэрэггүй юм.

Rails actions болон resources & resource тайлбар

Мөн resources болон resource ашиглан зохион байгуулах үед Path болон Named Route руу хандах хандалтуудад өөр хэсгүүд байдаг. Жишээ болгон хэрэглэгч гэсэн объект дээр resources болон resource-ийн route үүсгэж үзье.

resources болон resource харьцуулалт
  • HTTP Verb (Хүсэлтийн төрөл)
  • Path (URL-аар хандах хаяг, :id нь бааз дээрх бичлэгийн дугаар)
  • Controller#Action (#-аас өмнөх хэсэг нь controller, дараах нь action нэр)
  • Named Route (програмын дотор ашиглах хувьсагч)

Resources ашиглах үед объект маань олон тоон дээр (users), resource ашиглах үед объект маань ганц тоон дээр (user) байх нь зохимжтой байдаг. Route дээр resources болон resource-ийн алийг нь ашигласнаас үл хамааран controller нь олон тоон дээр (users) гэж нэрлэгдэг явдаг.

Дээрх жишээнд ижилхэн “/user” эсвэл “user_path” гэж нэрлэгдсэн Path болон Named Route байх боловч эдгээр нь харгалзах HTTP Verb нь ондоо тул түүгээрээ ялгагддаг.

Үндсэн 7-н action нь нэмэлт тохиргоогүй бол бүгд хандалт нь боломжтой байдаг бөгөөд хэрэглэхгүй action байх үед хандалтыг хязгаарлахын тулд only, except гэсэн нэмэлт тохиргоо хийж өгөх нь аюулгүй байдлыг нэмж өгдөг.

Жишээ нь хэрэглэгч нь өөрийн мэдээллийг харах болон өөрчилж чадах боловч устгахгүй гэсэн тохиолдолд destroy action-аар хандах хандалтыг хязгаарлах шаардлагатай. Энэ үед доорх 2 байдлаар тодорхойлж болох боловч except-ийг ашиглахаасаа илүүтэйгээр only ашигласан нь код уншихад илүү амар гэж үздэг тул аль болох only-оор тодорхойлох нь зүгээр байдаг.

only болон except

Бие биедээ багтсан (nested) resources

Нэг объект нь нөгөө объектод агуулагдах үед бид бие биедээ багтсан (nested) resources ашигладаг.

Жишээ нь хэрэглэгчид (users) маань байгууллагад (organizations) харгалздаг гэвэл доорх байдлаар route зохион байгуулна.

бие биедээ багтсан resources

Энэ үед 10 дугаартай байгууллагын 20 дугаартай хэрэглэгчийн мэдээллийг харахын тулд доорх path-аар хандана.

/organizations/10/users/10

Дээрх жишээний route нь доорх байдлаар үүснэ.

Organizations болон users route

Эндээс Path болон Named Route нь байгууллага дотор хэрэглэгч нь байгааг зааж байгаа боловч байгууллага болон хэрэглэгчийн controller-ууд нь нэг ижил хавтсанд байна. Хэрэв Path-тай ижилхэн хэрэглэгчийн controller-ийг байгууллага дотор оруулахыг хүсвэл module тохиргоог ашиглаж болно.

users_controller нь organizations хавтсанд байрлана

Дээрх жишээний route нь доорх байдлаар үүсэх бөгөөд өмнөхөөс зөвхөн хэрэглэгчийн Control#Action-ийн хэсэг ондоо байна.

Organizations болон users route

Namespace болон scope

Нэг програмын дээр бие даасан өөр хэсэг хийх үед namespace ашиглан Path-аар нь ялгаж гаргаж болдог. Жишээ нь бидэнд admin зөвхөн хандах хэсэг гаргах хэрэгтэй бол үүнийг namespace-ээр доорх байдлаар шийднэ.

Users болон Organizations controller-ууд нь admin хавтсанд багцлагдана

Дээрх жишээний route нь доорх байдлаар үүснэ.

admin namespace route

Хэрэв admin хавтсанд бүлэглэсэнч Path-ийг нь admin-гүй хэрэглэх хэрэгтэй үед scope ашиглан тодорхойлдог.

Дээрх жишээний route нь доорх байдлаар үүсэх бөгөөд өмнөхөөс Path болон Named Route-ийн хэсэг ондоо байна.

admin scope module route

Scope-ийг дангаар нь болон нэмэлт 3-н тодорхойлолттой хэрэглэж болно.

  1. moduleController-ийн байршил өөрчилнө.
  2. pathURI-ийн байршил өөрчилнө.
  3. asNamed Route өөрчилнө.
module, path, as-ийн нөлөөллийг харьцуулсан хүснэгт

Эдгээр дээр дээрх хэрэглэгчийн мэдээллийг зөвхөн scope-д оруулснаар ямар болохыг харьцуулан үзье.

Зөвхөн scope тодорхойсон үед

Зөвхөн scope дангаар нь оруулсан үед Path-д зөвхөн admin нэмэгдэж байна.

Scope-ийг нэмэлт тодорхойлолтгүй оруулсан үед Path-ийн өөрчлөлтийг авдаг. Хэрэв тодорхойлолттой үед тэр тодорхойлолтоо авдаг байна.

Scope болон module-аар тодорхойлсон үед

Module нэмж тодорхойлсноор Path дахь өөрчлөлт байхгүй болж зөвхөн Controller#Action дээр admin нэмэгдэж байна.

Scope болон path-аар тодорхойлсон үед

Path нэмж тодорхойлсноор Path зөвхөн өөрчлөлт орж байна. Энэ нь ямар нэгэн нэмэлтгүй scope тодорхойлсонтой ижилхэн үр дүн гаргаж байгаа боловч module тодорхойлогдох үед Path-ийн өөрчлөлтийг байхгүй болгоход давхар ашиглаж болдог.

Scope болон as-аар тодорхойлсон үед

Module нэмж тодорхойлсноор зөвхөн Named Route дээр admin нэмэгдэж байна.

Мэдээж энэ 3-н тодорхойлолтын хослолыг зэрэгцүүлэн ашиглах боломжтой байдаг бөгөөд эдгээрийг ашигласнаараа хүссэнээрээ Path, Controller#Action, Named Route-ийн байршлуудыг өөрчилж болдог.

Root түүний Namespace доторх хэрэглээ

Root to-г програмын эхлэлд үзүүлэх Controller#Action заахад ашигладаг. Мөн үүнийг namespace-ийн URL-аар хандах үед үзүүлэх Controller#Action заахад ашиглаж болдог.

Жишээ болгон admin namespace-ийн root to-г тодорхойлж үзье.

root to тодорхойлолт

Эхний root to код нь програмын эхлэлд үзүүлэх Controller#Action бөгөөд дараагийн root to код нь admin namespace-ийн эхлэлд үзүүлэх Controller#Action болно.

admin гэсэн Path-аар хандахад байгууллагын index хуудсыг үзүүлнэ гэсэн үг юм.

Жишээнд байгаачлан хэд л бол хэдэн root to-г тодорхойлох боломжтой байдаг.

Өөрчилсөн (custom) route

Дээрх аргачлалаас гадна өөрчилсөн route тодорхойлж шинээр action үүсгэж болно. Энэ үед resources дээр нэмэлтээр custom route багцлан оруулахдаа collection ашиглан оруулах нь тохиромжтой байдаг.

Жишээ болгон хэрэглэгчийн мэдээлэл хайдаг search route нэмж үзье.

search өөрчилсөн route оруулах
search өөрчилсөн route оруулах

Collection ашиглан оруулсан үед манай resource дотор custom route маань дээрх байдалтай орж ирсэн байна.

Гэвч rails үүсгэн байгуулагч маань зарлахдаа хэрэв өөрчилсөн route үүсэх гээд байвал тусдаа resource гарган түүн дээрээ хэрэгцээт үйлдлээ хийх нь зөв хэмээсэн байдаг.

Хэрэглэх хэрэггүй гэсэн сэдэв тул энд дэлгэрэнгүй танилцуулахгүй байхаар шийдлээ. Дэлгэрэнгүйг доорх линкээс дэлгэрэнгүйг үзээрэй.

--

--