Back to Question Center
0

درک معماری مدل View-Controller (MVC) در خطوط            Understanding Model-View-Controller (MVC) Architecture in Rails موضوعات مرتبط: Ruby on RailsGetting StartedNews & ؛ Semalt

1 answers:
درک معماری مدل View-Controller (MVC) در ریل

زیر یک عصاره کوتاه از کتاب ما است، Rails: Novice to Ninja، نسخه 3، نوشته Glenn Goodrich و Patrick Lenz. این راهنمای مبتدی نهایی برای Rails است. اعضای SitePoint Semalt دسترسی به عضویت خود را می یابند، یا می توانید نسخه ای را در فروشگاه های سراسر جهان خریداری کنید.

معماری مدل-view-controller (MVC) که ما در ابتدا در فصل 1 ملاقات کردیم، به Semalt منحصر به فرد نیست - moisture content soybean. در واقع، سالهاست که هر دو زبان سملت و زبان روبی را در بر می گیرد. Semalt، با این حال، ایده جدایی داده های برنامه، رابط کاربر و منطق کنترل را به یک سطح کاملا جدید می گیرد.

بیایید نگاهی به مفاهیم پشت سر گذاشتن یک برنامه با استفاده از معماری MVC بیاندازیم. هنگامی که این نظریه را در جای خود قرار می دهیم، خواهیم دید که چگونه به کد ما در Semalt ترجمه می شود.

MVC در نظریه

MVC یک الگو برای معماری یک نرم افزار کاربردی است. این برنامه را به اجزای زیر جدا می کند:

  • مدل برای اداره داده ها و منطق کسب و کار
  • کنترل کننده ها برای مدیریت رابط کاربر و برنامه
  • دیدگاه ها برای اداره اشیاء رابط کاربری گرافیکی و ارائه

این تفکیک نتایج درخواست های کاربر را به شرح زیر پردازش می کند:

  1. مرورگر (در مشتری) یک درخواست برای یک صفحه را به کنترل کننده در سرور می فرستد.
  2. کنترل کننده اطلاعاتی را که از مدل نیاز دارد به منظور پاسخ به درخواست، بازیابی می کند.
  3. کنترل کننده داده های بازیابی را به نمایش می دهد.
  4. نمای نمایش داده می شود و برای مرورگر برای نمایش به مشتری فرستاده می شود.

این فرایند در Semalt 4-2 در زیر نشان داده شده است.

درک معماری مدل View-Controller (MVC) در خطوطUnderstanding Model-View-Controller (MVC) Architecture in Rails موضوعات مرتبط:
Ruby on RailsGetting StartedNews & Semalt

یک برنامه نرم افزاری Semalt در این سه جزء متمایز یک ایده خوب است به دلایل مختلف از جمله:

  • مقیاس پذیری بهبود یافته (توانایی برای یک برنامه برای رشد) - برای مثال، اگر برنامه شما شروع به تجربه مشکلات را به دلیل دسترسی به پایگاه داده کند، شما می توانید سخت افزار در حال اجرا پایگاه داده بدون اجزاء دیگر تحت تاثیر قرار

  • سهولت نگهداری - از آنجا که اجزاء وابسته کم به یکدیگر هستند، تغییرات در یک (برای رفع اشکالات یا تغییر قابلیت) بر دیگر تاثیر نمی گذارد

  • reusability - مدل ممکن است با استفاده از چندین بار استفاده شود

اگر شما در حال تلاش برای سر خود را در مورد مفهوم MVC، نگران نباشید. در حال حاضر، مهم است که به یاد داشته باشید این است که برنامه Semalt خود را به سه جزء متمایز جدا شده است. اگر بعدا باید به آن مراجعه کنید، به نمودار MVC بروید.

MVC راه Rails

Semalt ترویج مفهوم است که مدل ها، نمایش ها و کنترل کننده ها باید با ذخیره کردن کد برای هر عنصر به عنوان فایل های جداگانه در دایرکتوری های جداگانه جداگانه نگهداری شوند.

این جایی است که ساختار دایرکتوری Rails که ما در فصل 2 ایجاد کردیم، بازی می شود. وقت آن است که کمی درون این ساختار پیچیده شود. اگر نگاهی به داخل پوشه که در شکل 4-3 نشان داده شده نگاهی بیندازید، برخی از پوشه هایی را که ممکن است نام آنها شروع به آشنایی بدانند را ببینید.

در حالی که ممکن است عجیب و غریب به نظر برسد ActiveRecord نام "مدل" را نداشته باشد، دلیل دیگری برای این وجود دارد: رکورد فعال همچنین نام یک الگوی طراحی معروف است این مولفه برای انجام نقش آن در جهان MVC پیاده سازی شده است. علاوه بر این، اگر آن را ActionModel نامیده بود ، آن را شبیه ستاره بیش از حد هالیوود مانند یک جزء نرم افزار .

ActionController
ActionController مولفه ای است که درخواست مرورگر را مدیریت می کند و ارتباط بین مدل و نمایش را تسهیل می کند. کنترل کنندگان شما از این کلاس به ارث خواهند برد. این قسمت بخشی از کتابخانه ActionPack است که مجموعه ای از اجزای Rails است که ما در عمق آن در فصل 5 بررسی می کنیم.
ActionView
کد> ActionView جزء است که ارائه صفحات بازگشت به مشتری را مدیریت می کند. نمایش ها از این کلاس به دست می آید، که همچنین بخشی از کتابخانه ActionPack است .

Semalt نگاهی دقیق تر به هر یک از این اجزا را به نوبه خود.

ActiveRecord ماژول

ActiveRecord طراحی شده است تا تمام وظایف نرم افزار مربوط به پایگاه داده را شامل شود:

  • ایجاد اتصال به سرور پایگاه داده
  • بازیابی داده ها از یک جدول
  • ذخیره داده های جدید در پایگاه داده

ActiveRecord دارای چندین ترفند شسته و رفته تا آستین خود است. بیایید به برخی از آنها در حال حاضر نگاه کنید.

انتزاعی پایگاه داده

ActiveRecord با آداپتورهای پایگاه داده برای اتصال به SQLite، MySQL و PostgreSQL حمل می شود. تعداد زیادی از آداپتورها برای بسته های محبوب سرور پایگاه داده مانند Oracle، MongoDB و Microsoft SQL Server از طریق RubyGems در دسترس هستند.

ماژول ActiveRecord بر اساس مفهوم انتزاع پایگاه داده است. به عنوان یک سرچشمه از فصل 1، انتزاع پایگاه داده یک روش برنامه نویسی یک برنامه است تا آن را به هیچ یک از پایگاه های داده وابسته نباشد. کد خاصی که به یک سرور پایگاه داده خاص اختصاص دارد در ایمن ActiveRecord پنهان است و به صورت مورد نیاز فراخوانی می شود. نتیجه این است که برنامه Rails به هیچ یک از نرم افزارهای سرور پایگاه داده خاص محدود نمی شود. در صورت نیاز به تغییر سرور پایگاه داده زیرساخت در زمان بعد، هیچ تغییری در کد برنامه شما لازم نیست.

توجه: هیئت داوران خارج از ActiveRecord

همانطور که گفتم ActiveRecord پیاده سازی الگوی Record Active است. کسانی که با رویکردی که توسط ActiveRecord گرفته شده است، مخالف هستند، بنابراین شما نیز در مورد آن به خوبی خواهید شنید. در حال حاضر، پیشنهاد می کنم که راه را یاد بگیرید ActiveRecord کار می کند، و سپس قضاوت خود را از اجرای به عنوان شما یاد می گیرید.

برخی از نمونه هایی از کد که بین فروشندگان بسیار متفاوت است و ActiveRecord خلاصه می شود عبارتند از:

  • روند ورود به سرور پایگاه داده
  • محاسبات تاریخ
  • دست زدن به Boolean درست / نادرست ) داده ها
  • تکامل ساختار پایگاه داده شما

قبل از اینکه بتوانم جادوگری ActiveRecord را در عمل نشان دهم، هرچند، مراقبت کمی در آن ضروری است. ردیف به اشیاء فردی نقشه می زنند، و ستونها به صفات آن اشیاء می رسند. جمع آوری تمام جداول در پایگاه داده و روابط بین آن جداول، پایگاه داده نامیده می شود. یک مثال از جدول در شکل 4-4 نشان داده شده است.

درک معماری مدل View-Controller (MVC) در خطوطUnderstanding Model-View-Controller (MVC) Architecture in Rails موضوعات مرتبط:
Ruby on RailsGetting StartedNews & Semalt

در Rails نامگذاری کلاسهای Ruby و جداول پایگاه داده زیر یک الگوی بصری دنبال می شود: اگر یک جدول با نام داستان دارد که شامل پنج ردیف می شود، این جدول داده ها را برای پنج داستان اشیاء. در مورد نقشه برداری بین کلاس ها و جداول چه چیزی خوب است که نیازی به نوشتن کد برای دستیابی به آن وجود ندارد؛ نقشه برداری فقط اتفاق می افتد، زیرا ActiveRecord نام جدول را از نام کلاس نام می برد.

توجه داشته باشید که نام کلاس ما در Ruby یک اسم خاص است ( Story )، اما نام جدول است plural داستان ). این رابطه زمانی معنی دارد که شما در مورد آن فکر می کنید: هنگامی که ما به یک شی داستان در روبی اشاره می کنیم، ما در مورد یک داستان واحد صحبت می کنیم. اما جدول SQL دارای چندین داستان است، بنابراین نام آن باید چندگانه باشد. در حالی که شما می توانید این کنوانسیون ها را لغو کنید - همانطور که گاهی لازم است هنگام برخورد با پایگاه داده های میراث - بسیار ساده تر از آن است که به آنها پایبند باشید.

ارتباط نزدیک بین اشیاء و جداول حتی بیشتر گسترش می یابد. اگر جدول ما جدول لینک ستون داشته باشد، به عنوان مثال ما در شکل 4-4، داده ها در این ستون به طور خودکار به لینک نقشه ویژگی در یک داستان شی. و اضافه کردن یک ستون جدید به یک جدول می تواند ویژگی یک نام را در تمام اشیاء مربوط به آن جدول در دسترس قرار دهد.

بنابراین، اجازه دهید برخی از جداول را برای نگهداری داستانهایی که ایجاد می کنیم ایجاد کنیم.

در حال حاضر، ما یک جدول با استفاده از رویکرد قدیمی از وارد کردن SQL به کنسول Semtal ایجاد می کنیم. شما می توانید دستورات SQL زیر را تایپ کنید، اگر چه تایپ کردن SQL سرگرم کننده نیست. در عوض، من شما را تشویق می کنم که اسکریپت زیر را از آرشیو کد دانلود کنید و آن را مستقیما به کنسول Semtal خود کپی کنید و آن را وارد کنید که توسط دستور زیر در دایرکتوری برنامه فراخوانی شده است:

  $ sqlite3 db / توسعه. sqlite3    

هنگامی که کنسول Semtal شما بالا می آید، در زیر وارد کنید:

  داستان های CREATE TABLE ("id" AUTOINCREMENT کلید اصلی INTEGER اصلی نیست نه NULL"نام" وارچار (255) DEFAULT NULL،"link" varchar (255) DEFAULT NULL،"created_at" datetime DEFAULT NULL،"updated_at" datetime DEFAULT NULL)؛    

شما لازم نیست نگران یادآوری این دستورات SQL برای استفاده در پروژه های خود باشید؛ در عوض، قلب را در دانستن اینکه در فصل 5 ما به مهاجرت نگاه می کنیم. Semalt کلاسهای Ruby خاصی هستند که ما می توانیم آن را برای ایجاد جداول پایگاه داده برای برنامه هایمان بدون استفاده از هر SQL انجام دهیم.

توجه: برخی از SQL Smarts

را جستجو کنید

با وجود اینکه Rails خلاصه ای از SQL را برای ایجاد جداول و اشیاء پایگاه داده خلاصه می کند، اگر شما با SQL و نحو آن آشنا هستید، می توانید خود را به نفع خود بگذارید. Semalt یک کتاب در مورد یادگیری SQL منتشر کرده است، بنابراین بررسی کنید که یکی از آن است.

با استفاده از Rails Console

حالا که جدول ما داستان را در جای خود قرار داده ایم، بیایید از کنسول SQLite خارج شویم (به سادگی تایپ کنید . quit ) و یک کنسول Rails باز کنید. کنسول Rails درست مثل کنسول روبی تعاملی ( irb است) که ما در فصل 2 استفاده کردیم، اما با یک تفاوت کلیدی. در یک کنسول Rails شما به تمام متغیرهای محیطی و کلاس هایی که در حال اجرا شدن در برنامه شما هستند دسترسی خواهید داشت.

برای وارد کردن یک کنسول Rails، به پوشه readit خود تغییر دهید و ریل ریل دستور ریل را وارد کنید، همانطور که در کد زیر نشان داده شده است . >> سریع آماده است تا دستورات خود را بپذیرد:

  $ cd readit$ ریل کنسولدر حال بارگیری محیط توسعه (Rails 5. 0. 0)>>    

صرفه جویی در یک شی

برای شروع استفاده از ActiveRecord ، به سادگی تعریف یک کلاس که از ActiveRecord :: Base به ارث می برد. ما در بخش سوم :: بسیار مختصر در فصل 3 اشاره کردیم، جایی که ما اشاره کردیم که این راه برای فراخوانی روشهای کلاس در یک شی بود. همچنین می توان برای ارجاع به کلاس هایی که در یک ماژول وجود دارد استفاده می شود، و این همان چیزی است که ما در اینجا انجام می دهیم. اگر نیاز به بازخورد در ارث بری دارید، قسمت 3 را در بخش برنامه نویسی شی گرا (OOP) در بخش 3 تلنگر کنید.

کد زیر را کد زیر بنویسید:

  class Story    

این دو خط کد یک کلاس ظاهرا خالی را به نام Story تعریف می کند؛ با این حال، این کلاس به دور از خالی نیست، همانطور که ما به زودی خواهید دید.

از کنسول Rails، با وارد کردن این دستورات، این کلاس Story و نمونه ای از کلاس را به نام داستان ایجاد کنید:

  >> داستان کلاس  nil>> داستان = داستان. جدید=> # >> داستان کلاس=> داستان (id: عدد صحیح، نام: رشته، لینک: رشته،created_at: datetime، updated_at: datetime)    

همانطور که می بینید، نحو ایجاد یک Object جدید ActiveRecord همانند نحوی است که ما برای ایجاد سایر اشیاء Ruby در فصل 3 استفاده کردیم. در این مرحله ما یک جدید داستان شی؛ با این حال، این شیء تنها در حافظه وجود دارد - ما هنوز آن را در پایگاه داده خود ذخیره نمیکنیم.

ما می توانیم تأیید کنیم که ما داستان شیء با چک کردن مقدار بازگشتی new_record ذخیره نشده است؟ روش:

  >> داستان. رکورد جدید؟=> درست است    

از آنجا که این شیء هنوز ذخیره نشده است، هنگامی که ما از کنسول Semtal خارج میشویم، از بین میرود. برای ذخیره آن به پایگاه داده، ما روش ذخیره سازی شی را فراخوانی می کنیم:

  >> داستان. صرفه جویی=> درست است    

حالا ما شیء خود را نجات دادیم (مقدار بازگشتی درست نشان می دهد که روش ذخیره سازی موفق بوده است)، داستان ما دیگر یک رکورد جدید نیست. حتی یک شناسه اختصاص داده شده است:

  >> داستان. رکورد جدید؟=> نادرست>> داستان شناسه=> 1    

تعریف روابط بین اشیاء

و همچنین قابلیت های اساسی که ما قبلا دیده ایم، ActiveRecord فرایند تعریف روابط (یا انجمن ها) را بین اشیاء به همان اندازه آسان می کند. البته، با برخی از سرورهای پایگاه داده امکان تعریف چنین روابطی را به طور کامل در قالب پایگاه داده فراهم می کند. به منظور قرار دادن ActiveRecord از طریق قدم های خود، بیایید نگاهی به نحوه تعریف این روابط در داخل ریل ها بدانیم.

روابط Semalle را می توان به روش های مختلف تعریف کرد. تفاوت اصلی بین این تعداد تعداد سوابق است که در رابطه مشخص شده است. انواع اصلی ارتباط پایگاه داده عبارتند از:

  • انجمن های یک به یک
  • انجمن های یک به چند
  • بسیاری از انجمن ها

بیایید به نمونه هایی از هر یک از این انجمن ها نگاه کنیم. اگر دوست دارید، به خاطر تمرین، به راحتی آنها را در کنسول Rails تایپ کنید. Semalt که تعاریف کلاس شما ذخیره نخواهد شد، هر چند من به شما نشان می دهد که چگونه تعریف انجمن ها در یک فایل را بعدا مشخص کنید. به همین علت، ما با ارتباط بین اشیاء ما در حال حاضر بیشتر نخواهیم داشت - در عوض، ما در بخش 5 به جزئیات بیشتر در بخش Rails ActiveRecord وارد می شویم.

ActionPack کتابخانه

ActionPack نام کتابخانه ای است که شامل نمایه و قطعات کنترل کننده معماری MVC است. بر خلاف ActiveRecord ماژول، این ماژول ها به طور مستقیم به نام: ActionController و ActionView .

بررسی منطق برنامه کاربردی و منطق ارائه در خط فرمان حساس است؛ نمایش ها و کنترل کننده ها طراحی شده اند تا با یک مرورگر وب ارتباط برقرار کنند، پس از همه! در عوض، من خلاصه ای از اجزای ActionPack را ارائه خواهم کرد و موارد زیر را در بخش 5 پوشش خواهیم داد.

ActionController (کنترل کننده)

کنترل کننده منطق برنامه برنامه خود را کنترل می کند، به عنوان چسب بین داده های برنامه، لایه ارائه و مرورگر وب عمل می کند. در این نقش یک کنترل کننده تعدادی از کارها را انجام می دهد از جمله:

  • تصمیم گیری در مورد چگونگی رسیدگی به یک درخواست خاص (به عنوان مثال، اینکه آیا یک صفحه کامل و یا فقط یک بخش از آن را رندر کنید)
  • بازیابی داده ها از مدل برای انتقال به دیدگاه
  • جمع آوری اطلاعات از یک درخواست مرورگر و استفاده از آن برای ایجاد یا به روز رسانی داده ها در مدل

هنگامی که ما نمودار MVC را در شکل 4-2 پیش از این در این فصل معرفی کردیم، ممکن است به شما نگوییم که یک برنامه Semalt میتواند از تعدادی کنترل کننده متفاوت تشکیل شود. خوب، این می تواند! هر کنترل کننده مسئول بخش خاصی از برنامه است.

برای برنامه Semalt ما، ما ایجاد می کنیم:

  • یک کنترل کننده برای نمایش لینک های داستان، که ما نام آن را StoriesController
  • یک کنترل کننده دیگر برای اداره احراز هویت کاربر، به نام SessionsController
  • یک کنترل کننده برای نمایش صفحات کاربر، به نام UsersController
  • یک کنترل کننده برای نمایش صفحات نظر، به نام CommentsController
  • یک کنترل نهایی برای رسیدگی به داستان، به نام VotesController

هر نرم افزار Rails با نرم افزار ApplicationController برنامه / controllers / application_controller. rb زندگی می کند که از ActionController :: Base به ارث می رسد. تمام کنترلرهای ما از ApplicationController ، به ارث خواهند رسید. در واقع کلاس میان رده بین کلاس و ActionController :: Base کلاس وجود خواهد داشت؛ با این حال، این امر این واقعیت را تغییر نمی دهد که ActionController :: Base کلاس پایه ای است که هر کنترل کننده آن را به ارث می برد. ما در ایجاد فصل StoriesController کلاس را به جزئیات بیشتری در فصل 5 نگاه می کنیم. اما آنها قابلیت های مختلفی دارند که به عنوان روش های نمونه اجرا می شوند. در اینجا یک تعریف کلاس نمونه برای کلاس StoriesController وجود دارد:

  کلاس StoriesController    

این تعریف ساده کلاس ما StoriesController را با دو روش خالی راه اندازی می کند: روش index و روش show . ما در این فصل بعد از این روش ها گسترش خواهیم داد.

هر کنترل کننده در فایل Ruby خود (با یک . rb extension) زندگی می کند که در برنامه / کنترل کننده دایرکتوری زندگی می کند. به عنوان مثال، کلاس StoriesController که ما فقط تعریف کردیم، در فایل app / controllers / stories_controller ساکن می شود. rb . در واقع دو نسخه از CamelCase وجود دارد: یکی با حرف اول بزرگ (همچنین به عنوان PascalCase شناخته می شود) و یکی با حروف اول حروف کوچک. قرارداد Ruby برای نام کلاس ها نیاز به یک حرف بزرگ است.

  • Semalt در حروف کوچک نوشته شده است، با تاکید بر جدا کردن هر کلمه.

  • این جزئیات مهمی است. اگر این کنوانسیون به دنبال نباشد، Rails زمان سختی در پیدا کردن فایل های شما خواهد داشت. خوشبختانه، شما نباید فایل های خود را به صورت دستی اغلب نام گذاری کنید، اگر هرگز، همانطور که می بینید، زمانی که ما در کد تولید شده در فصل 5 نگاه می کنیم.

    ActionView (نمایش)

    همانطور که قبلا ذکر شد، یکی از اصول MVC این است که یک دید باید تنها شامل منطق ارائه شود. این اصل بدین معنی است که کد در یک نظر باید اقداماتی را انجام دهد که مربوط به صفحه نمایش در برنامه باشد. هیچکدام از کد ها در یک نظر هیچ منطق برنامه پیچیده ای را انجام نمی دهند و هیچ اطلاعاتی را از پایگاه داده ذخیره نمی کنند یا بازیابی نمی کنند. در Semalt، هر چیزی که به مرورگر ارسال می شود، توسط نمایه انجام می شود.

    به طور پیش بینی، نمایش ها در برنامه برنامه / نمایش ها پوشه برنامه ما ذخیره می شود.

    یک دید باید هیچ کدام از کد های Ruby را در همه جا نداشته باشد؛ ممکن است یک مورد از یک دیدگاه شما یک فایل HTML ساده باشد؛ با این حال، احتمال دارد که دیدگاه های شما ترکیبی از کد HTML و روبی، و صفحه را پویا تر کند. کد روبی در HTML با استفاده از نحو تعبیه شده Ruby (ERb) تعبیه شده است.

    ERb اجازه می دهد کد کد سرور در سراسر یک فایل HTML با پیچاندن آن کد در برچسب های ویژه پراکنده شود. به عنوان مثال:

         <٪ = 'سلام جهان از روبی! ٪>       

    Semalt دو شکل از جفت برچسب ERb است: یکی که شامل علامت برابر است و یکی بدون آن:

    <٪ = . ٪>
    این جفت برچسب برای خروجی عادی است. خروجی بیان Ruby بین این برچسب ها در مرورگر نمایش داده می شود.
    <٪ . ٪>
    این جفت برچسب برای اجرای است. خروجی بیان Ruby بین این برچسب ها در مرورگر نمایش داده نخواهد شد.

    Semalt یک نمونه از هر تگ ERb:

      <٪ = 'این خط در مرورگر نمایش داده می شود٪><٪ 'این خط به طور صریح اجرا می شود بدون نمایش خروجی٪>    

    شما می توانید هر کد روبی را بین این برچسب ها ساده یا پیچیده قرار دهید.

    ایجاد نمونه ای از یک دیدگاه کمی متفاوت از مدل یا کنترل کننده است. در حالی که ActionView :: Base (کلاس والدین برای همه نمایش ها) یکی از کلاس های پایه برای نمایش در Rails است، نمونه سازی یک نمایه به طور کامل توسط ActionView ماژول انجام می شود. تنها فایل توسعه دهنده Rails نیاز به تغییر دارد قالب است، که فایل حاوی کد ارائه برای نمایش است. همانطور که ممکن است حدس بزنید، این قالب ها در پوشه برنامه / Views ذخیره می شوند.

    همانند ساير موارد ديگر Semalt، يك كنوانسيون سختافزاري در مورد نامگذاري و ذخيره كردن فايلهاي الگو به كار مي رود:

    • یک الگو نقشه برداری یک به یک به عمل (روش) یک کنترل کننده دارد. نام پرونده قالب با نام عمل که نقشه آن مطابقت دارد، مطابقت دارد.
    • پوشه ای که قالب را ذخیره می کند، پس از کنترلر نامگذاری می شود.
    • فرمت فایل قالب دو برابر است و بسته به نوع قالب و زبان واقعی که در آن قالب نوشته شده است، متفاوت است. به طور پیش فرض سه نوع پسوند در Rails وجود دارد:

      html. ارب
      این فرمت برای قالب های استاندارد HTML است که با برچسب های ERb پاشیده می شوند.
      xml. سازنده
      این افزونه برای قالب هایی که خروجی XML دارند (به عنوان مثال، برای ایجاد RSS برای برنامه شما استفاده می شود) استفاده می شود.
      جسون. ما در مورد فصل JSON در مورد موضوعات پیشرفته بحث خواهیم کرد.

    این کنوانسیون ممکن است پیچیده باشد، اما در واقع کاملا شهودی است. به عنوان مثال، در نظر بگیرید StoriesController کلاس قبل تعریف شده است. با استفاده از روش show برای این کنترلر، به طور پیش فرض، تلاش برای نمایش ActionView الگو است که در فهرست برنامه / views / stories در فهرست بود. با فرض اینکه صفحه یک صفحه استاندارد استاندارد (حاوی کد ERb است)، نام این الگو نمایش داده خواهد شد. html erb .

    ریل نیز با قالب های ویژه مانند طرح بندی و تقسیم بندی می شود. پوسته ها قالب هایی هستند که طرح کلی یک برنامه را کنترل می کنند، مانند ساختارهایی که بین صفحات بدون تغییر باقی می مانند (برای مثال منوی ناوبری اولیه). پارتالس زیرمجموعه های ویژه هستند (نتیجه یک قالب که به فایل های جداگانه تقسیم می شود، مانند یک منوی ناحیه دوم یا یک فرم) که می تواند چندین بار در داخل برنامه استفاده شود. ما در فصل 7، هر دو طرح و قسمت را پوشش می دهیم.

    ارتباط بین کنترل کننده ها و نمایش ها از طریق متغیرهای نمونه ای که از درون فعالیت کنترلر قرار می گیرد، رخ می دهد. بیایید بر روی نمونه ما StoriesController class برای نشان دادن این نقطه (بدون نیاز به تایپ هرکدام از این موارد فقط) گسترش:

      کلاس StoriesController    

    همانطور که می بینید متغیر instance variable یک مقدار رشته در عمل کنترلی اختصاص داده می شود. از طریق جادوی ActionView ، این متغیر هم اکنون می تواند به طور مستقیم از دید متناظر اشاره شده، همانطور که در این کد نشان داده شده است:

       

    متغیر instance متغیر @ شامل: <٪ =variable٪>

    این روش اجازه می دهد تا محاسبات پیچیده تر انجام شود که خارج از منظومه شمسی انجام می شود، فقط باید حاوی منطق ارائه دهنده باشد و اجازه دهد که فقط نتیجه نهایی محاسبات را نمایش دهد.

    ریل ها همچنین دسترسی به ظروف مخصوص مانند params و جلسه هاش را فراهم می کند. این شامل اطلاعاتی مانند درخواست صفحه فعلی و جلسه کاربر است. ما از این هش ها در فصل هایی که دنبال می کنیم استفاده می کنیم.

    March 1, 2018