برنامه نویسی

ویژگی های جزئی Rails که (نمی دانستید)

Summarize this content to 400 words in Persian Lang
این مقاله در اصل در Rails Designer منتشر شده است

قطعات جزئی بخشی جدایی ناپذیر از Rails بوده است. درک آنها از نظر مفهومی ساده است، اما دارای تعدادی ویژگی هوشمند و کمتر شناخته شده هستند که ممکن است درباره آنها ندانید. بیایید به همه آنها نگاه کنیم!

رندر اولیه

بیایید به اصول رندر جزئی نگاه کنیم.

<%= render partial: “application/navigation” %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این جزئی را رندر می کند app/views/application/_navigation.html.erb. نام فایل با زیرخط شروع می شود، اما ارجاعات بدون علامت است.

شما همچنین می توانید حذف کنید partial کلمه کلیدی

<%= render “application/navigation” %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تا اینجا چیزی که قبلاً نمی دانستید، گمان می کنم.

متغیرهای محلی

شما می توانید متغیرهایی مانند آن را ارسال کنید.

<%= render partial: “user”, locals: {user: @user} %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باز هم می توان از این دست کوتاه نیز استفاده کرد:

<%= render “user”, user: @user %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا اگر از قراردادهای a تا z پیروی می کنید، می توانید این را بنویسید:

<%= render @user %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این چند چیز را فرض می کند:

@user حضور دارد
یک جزئی _user.html.erb در برنامه/نمایش/کاربران.

کمی تمیزتر، درست است؟ بنابراین چه زمانی از نسخه دست کوتاه استفاده می شود و چه زمانی نه؟ معمولاً می‌توانید از نسخه کوتاه استفاده کنید، مخصوصاً زمانی که فقط 1 یا 2 متغیر را پاس می‌کنید. اما شما همچنین می توانید استدلال های دیگر را ارائه دهید. سپس لازم است از نحو طولانی تر استفاده شود. مانند این مثال:

<%= render partial: “user”, locals: {admin: @admin}, as: :user %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای محلی صریح

در Rails 7.2 معرفی شد. می توانید متغیرهای محلی صریح را طوری تنظیم کنید که به وضوح بگوید کدام متغیر مورد نیاز است.

<%# locals: (name:) -%>
<%= name %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما همچنین می توانید یک مقدار پیش فرض تعیین کنید. به طوری که اگر کاربر مجموعه نامی نداشته باشد، “Stranger” را ارائه می دهد.

<%# locals: (name: “Stranger”) -%>
<%= name %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تخصیص محلی

همچنین می توانید از “متغیرهای محلی ضمنی” استفاده کنید. موارد فوق را فرض کنید user_details در نمای مدیریت استفاده می شود.

<%= name %>

<% local_assigns[:admin?] %>

Created at:

<%= user.created_at %>

<% end %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما می توانید جزئی را به این صورت رندر کنید:

<%= render “user”, user: @user, name: “Cam”, admin?: true %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا حذف کنید admin?: true در نماهای غیر مدیریتی:

<%= render “user”, user: @user, name: “Cam” %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این مفید است، زیرا بدون local_assigns، رندر با شکست مواجه می شود.

طرح بندی برای جزئی

همچنین می‌توانید قسمتی را در «طرح‌بندی» بپیچید. این نباید با طرح‌بندی‌های نمایشی که در آن ذخیره شده‌اند اشتباه گرفته شود برنامه/نماها/طرح بندی ها.

<%= render partial: “user”, layout: “shared/admin” %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

“طرح بندی” مدیر در ذخیره می شود app/views/shared/_admin.html.erb و می تواند شبیه این باشد:

class=”admin”>
<%= yield %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مجموعه رندر

اگر می خواهید مجموعه ای از کاربران را رندر کنید، می توانید موارد زیر را بنویسید، به عنوان مثال در app/views/users/index.html.erb:

<%= render partial: “user”, collection: @users %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا نوع کوتاه آن:

<%= render @users %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این به طور خودکار به دنبال _user.html.erb جزئی در برنامه/بازدیدها/کاربران، با فرض @users مجموعه ای از کاربر's

اگرچه نیازی به مجموعه ای از یک منبع ندارد، به عنوان مثال کاربر. این نیز کار می کند:

<%= render [User.first, Admin.first, Customer.first, User.second] %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این به این صورت است که شما آن منابع را دارید، و هر کدام بخشی مربوط به خود را دارند، به عنوان مثال _user.html.erb، _admin.html.erb و _customer.html.erb.

حالت خالی

اگر مجموعه، به عنوان مثال @users خالی است، render برمی گرداند nil. بنابراین اگر می خواهید یک حالت خالی ارائه دهید، این کار ساده است.

<%= render(@users) || “No users yet…” %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای محلی

می توانید متغیر محلی را نیز با یک مجموعه تغییر دهید.

<%= render partial: “user”, collection: @users, as: :customer %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در _user.html.erb جزئی، اکنون می توانید استفاده کنید customer.id (یا هر ویژگی دیگری که در دسترس است).

شما همچنین متغیرهای دیگر را پاس می کنید:

<%= render partial: “user”, collection: @users, locals: {admin?: true} %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای شمارنده

شما می توانید یک شمارنده نیز ارائه دهید: <%%= user_counter %>. نام، قسمت قبل از خط زیر، از نام جزئی گرفته شده است. بنابراین **customer.html.erb*می شود* <%%= customer_counter %>.

چیدمان برای مجموعه ها

به طور مشابه به منابع جزئی، می‌توانید مجموعه‌های جزئی را نیز ارسال کنید طرح بندی گزینه

<%= render partial: @users, layout: “users/wrapper” %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس در app/views/users/_wrapper.html.erb، می توانید چیزی شبیه به این داشته باشید:

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

قالب Spacer

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

<%= render partial: @users, spacer_template: “user/divider” %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این قسمت جزئی را بارگذاری می کند app/views/users/_divider.html.erb.

امتیاز: جزئی ها را شبیه اجزاء کنید

اگر از ViewComponent استفاده کرده‌اید، اما به هر دلیلی نمی‌توانید از آن‌ها در پروژه فعلی خود استفاده کنید، در اینجا روشی وجود دارد که می‌توانید جزئی‌های خود را کمی بیشتر شبیه ViewComponent کنید.

اجزای خود را در برنامه/نما/کامپوننت. به عنوان مثال الف _card.html.erb.

class=”card”>
class=”card__header”>
<%= title %>

class=”card__body”>
<%= yield %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس به نظر شما از آن به صورت زیر استفاده کنید:

<%= render layout: “components/card”, locals: { title: “User Profile” } do %>
Just some text for this user
<% end %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اما احتمالاً به کمکی می‌خواهید که مقداری از آن صفحه دیگ را جدا کند.

# app/helpers/components_helper.rb
module ComponentsHelper
def component(name, **, &)
render layout: “components/#{name}”, locals: **, &
end
end

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا شما آن را به این صورت رندر می دهید:

<%= component “card”, title: “User Profile” do %>
Just some text for this user
<% end %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آن را با متغیرهای محلی Explicit جفت کنید و یک راه‌اندازی کاملاً جامد مانند مؤلفه بدون هیچ گونه وابستگی دریافت می‌کنید.

و این همه چیزهایی است که شما (نمی‌دانستید) درباره پارتیال‌های ریلز.

این مقاله در اصل در Rails Designer منتشر شده است


قطعات جزئی بخشی جدایی ناپذیر از Rails بوده است. درک آنها از نظر مفهومی ساده است، اما دارای تعدادی ویژگی هوشمند و کمتر شناخته شده هستند که ممکن است درباره آنها ندانید. بیایید به همه آنها نگاه کنیم!

رندر اولیه

بیایید به اصول رندر جزئی نگاه کنیم.

<%= render partial: "application/navigation" %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این جزئی را رندر می کند app/views/application/_navigation.html.erb. نام فایل با زیرخط شروع می شود، اما ارجاعات بدون علامت است.

شما همچنین می توانید حذف کنید partial کلمه کلیدی

<%= render "application/navigation" %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تا اینجا چیزی که قبلاً نمی دانستید، گمان می کنم.

متغیرهای محلی

شما می توانید متغیرهایی مانند آن را ارسال کنید.

<%= render partial: "user", locals: {user: @user}  %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باز هم می توان از این دست کوتاه نیز استفاده کرد:

<%= render "user", user: @user %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا اگر از قراردادهای a تا z پیروی می کنید، می توانید این را بنویسید:

<%= render @user %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این چند چیز را فرض می کند:

  • @user حضور دارد
  • یک جزئی _user.html.erb در برنامه/نمایش/کاربران.

کمی تمیزتر، درست است؟ بنابراین چه زمانی از نسخه دست کوتاه استفاده می شود و چه زمانی نه؟ معمولاً می‌توانید از نسخه کوتاه استفاده کنید، مخصوصاً زمانی که فقط 1 یا 2 متغیر را پاس می‌کنید. اما شما همچنین می توانید استدلال های دیگر را ارائه دهید. سپس لازم است از نحو طولانی تر استفاده شود. مانند این مثال:

<%= render partial: "user", locals: {admin: @admin}, as: :user %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای محلی صریح

در Rails 7.2 معرفی شد. می توانید متغیرهای محلی صریح را طوری تنظیم کنید که به وضوح بگوید کدام متغیر مورد نیاز است.

<%# locals: (name:) -%>
<%= name %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما همچنین می توانید یک مقدار پیش فرض تعیین کنید. به طوری که اگر کاربر مجموعه نامی نداشته باشد، “Stranger” را ارائه می دهد.

<%# locals: (name: "Stranger") -%>
<%= name %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تخصیص محلی

همچنین می توانید از “متغیرهای محلی ضمنی” استفاده کنید. موارد فوق را فرض کنید user_details در نمای مدیریت استفاده می شود.

<%= name %> <% local_assigns[:admin?] %>
Created at:
<%= user.created_at %> <% end %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما می توانید جزئی را به این صورت رندر کنید:

<%= render "user", user: @user, name: "Cam", admin?: true %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا حذف کنید admin?: true در نماهای غیر مدیریتی:

<%= render "user", user: @user, name: "Cam" %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این مفید است، زیرا بدون local_assigns، رندر با شکست مواجه می شود.

طرح بندی برای جزئی

همچنین می‌توانید قسمتی را در «طرح‌بندی» بپیچید. این نباید با طرح‌بندی‌های نمایشی که در آن ذخیره شده‌اند اشتباه گرفته شود برنامه/نماها/طرح بندی ها.

<%= render partial: "user", layout: "shared/admin" %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

“طرح بندی” مدیر در ذخیره می شود app/views/shared/_admin.html.erb و می تواند شبیه این باشد:

class="admin"> <%= yield %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مجموعه رندر

اگر می خواهید مجموعه ای از کاربران را رندر کنید، می توانید موارد زیر را بنویسید، به عنوان مثال در app/views/users/index.html.erb:

<%= render partial: "user", collection: @users %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا نوع کوتاه آن:

<%= render @users %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این به طور خودکار به دنبال _user.html.erb جزئی در برنامه/بازدیدها/کاربران، با فرض @users مجموعه ای از کاربر's

اگرچه نیازی به مجموعه ای از یک منبع ندارد، به عنوان مثال کاربر. این نیز کار می کند:

<%= render [User.first, Admin.first, Customer.first, User.second] %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این به این صورت است که شما آن منابع را دارید، و هر کدام بخشی مربوط به خود را دارند، به عنوان مثال _user.html.erb، _admin.html.erb و _customer.html.erb.

حالت خالی

اگر مجموعه، به عنوان مثال @users خالی است، render برمی گرداند nil. بنابراین اگر می خواهید یک حالت خالی ارائه دهید، این کار ساده است.

<%= render(@users) || "No users yet…" %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای محلی

می توانید متغیر محلی را نیز با یک مجموعه تغییر دهید.

<%= render partial: "user", collection: @users, as: :customer %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در _user.html.erb جزئی، اکنون می توانید استفاده کنید customer.id (یا هر ویژگی دیگری که در دسترس است).

شما همچنین متغیرهای دیگر را پاس می کنید:

<%= render partial: "user", collection: @users, locals: {admin?: true} %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای شمارنده

شما می توانید یک شمارنده نیز ارائه دهید: <%%= user_counter %>. نام، قسمت قبل از خط زیر، از نام جزئی گرفته شده است. بنابراین **customer.html.erb*می شود* <%%= customer_counter %>.

چیدمان برای مجموعه ها

به طور مشابه به منابع جزئی، می‌توانید مجموعه‌های جزئی را نیز ارسال کنید طرح بندی گزینه

<%= render partial: @users, layout: "users/wrapper" %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس در app/views/users/_wrapper.html.erb، می توانید چیزی شبیه به این داشته باشید:


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

قالب Spacer

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

<%= render partial: @users, spacer_template: "user/divider" %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این قسمت جزئی را بارگذاری می کند app/views/users/_divider.html.erb.

امتیاز: جزئی ها را شبیه اجزاء کنید

اگر از ViewComponent استفاده کرده‌اید، اما به هر دلیلی نمی‌توانید از آن‌ها در پروژه فعلی خود استفاده کنید، در اینجا روشی وجود دارد که می‌توانید جزئی‌های خود را کمی بیشتر شبیه ViewComponent کنید.

اجزای خود را در برنامه/نما/کامپوننت. به عنوان مثال الف _card.html.erb.

class="card">

class="card__header"> <%= title %>

class="card__body"> <%= yield %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس به نظر شما از آن به صورت زیر استفاده کنید:

<%= render layout: "components/card", locals: { title: "User Profile" } do %>
  Just some text for this user
<% end %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اما احتمالاً به کمکی می‌خواهید که مقداری از آن صفحه دیگ را جدا کند.

# app/helpers/components_helper.rb
module ComponentsHelper
  def component(name, **, &)
    render layout: "components/#{name}", locals: **, &
  end
end
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا شما آن را به این صورت رندر می دهید:

<%= component "card", title: "User Profile" do %>
  Just some text for this user
<% end %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آن را با متغیرهای محلی Explicit جفت کنید و یک راه‌اندازی کاملاً جامد مانند مؤلفه بدون هیچ گونه وابستگی دریافت می‌کنید.

و این همه چیزهایی است که شما (نمی‌دانستید) درباره پارتیال‌های ریلز.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا