ایجاد استایل دلخواه برای هر صفحه در ریلز چگونه است؟

من دارم از bootstrap استفاده می کنم یه css به نام custom همیشه میسازم که کلاس های بوتسترپ و توش اور رایت میکنم حالا مثلا من اومد بوتسرپ و کاستوم و ریختم تو asset تا اینجا اوکیه تو application.css اولویت ها رو مشخص میکنم و میگم کاستوم بعد از بوتس بیاد .حالا من میخوام مثلا صفحه مدیر از بوتسرپ استفاده کنم میام یه layout میسازم و اونو میدم به کنترلر مدیر حالا یه customadminمیسازم که اینم دوباره اور رایت میکنه بوتسو و اونو میزارم تو asset حالا چطور میتونم بگم همه stylesheetها رو نخونه واونی که من میگم و بخونه مثلا صفحه مدیر اومدی cusome اولی رو نخون.
البته روشی که کارم و راه بندازه اینه که تو asset فقط بوتسو بزارم و اونیکیارو ببرم تو public و برای هر layoutدستی لینک بدم.
منتها میخواستم ببینم میشه گفت application.cssبرای هر صفحه یه css هایی که من میگم بیاره.
امیدوارم درست مطلب و رسونده باشم

براي اينكه مديريت اين كار ساده باشه ميتوني layout جديد درست كني. و توي هر كنترلر layout خودش رو صدا بزني

layout 'my_layout'

http://guides.rubyonrails.org/layouts_and_rendering.html

من دقیقا همین کار و میکنم منتها تو اونجام میام application. Css فراخوانی میکنم که همون حالت قبلی پیش میاد دیگه من میخوام بدونم راهی هست که بتونیم نسبت به هر layout ترتیب اولویت های application. Css عوض کنیم

خوب به نظر من ساده ترين راه اينه كه override ها رو توي يه css ديگه تعريف كني بعد هر layout به جز css اصلي css خودش رو هم بعد از اصلي لود كنه،

يك سري جم كه اين كارو انجام بده هم هست، اما اگه براي هر كاري يه جم نصب كني بعد ها به مشكل ميخوري

میتونی دو تا layout متفاوت و دو تا فایل manifest متفاوت برای ادمین و یوزر داشته باشی.

مثلا:

# app/assets/stylesheets/admins.css
 *= require bootstrap
 *= require admins_overwrites

فایل config/initializers/assets.rb رو تغییر میدی و مانیفست جدید رو معرفی میکنی:

# config/initializers/assets.rb
 Rails.application.config.assets.precompile += %w(admins.css)

یک فایل layout جدید ایجاد میکنی و به بجای application فایل جدید admins رو میذاری

# ...
  <%= stylesheet_link_tag    "admins", :media => "all" %>
# ...

بعدم تو controller مربوط به admin میگی بجای application از layout دیگه admins استفاده کنه:

class AdminsController < ApplicationController
layout "admins"
# ...

اینکه داخل فایل application بتونی بگی کدوم فایل رو برای کدوم controller استفاده کنه، نه نمیشه. اصن همچین چیزی امکان نداره. در نهایت همه assetها در واقع compile میشن و یک فایل application.css واحد ساخته میشه. عملا همچین چیزی امکان نداره.

2 پسندیده

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

من دقیقا این کارو میکنم ولی اینجوری اون layout آدمینمو اوکی میکنم ولی تو اون layout اپلیکیشن م ورد داره چرا چون اونجام میاد هم بر فرض overwrites. Css ام میخونه و هم custom. Cssو اون موقع همه چی بهم میریزه

متوجه نمی‌شم. تو هر کدوم از layoutها یک فایل CSS متفاوت import میکنی و تو هر فایل CSS هم فایل‌های متفاوت require میکنی. چطور ممکنه با هم تداخل داشته باشن؟

توی gist نمونه فایل layout و asset ها رو بزار که بشه دید مشل از کجاست.

خط زیر از CSS حذف کن اگر نکردی و CSS ها رو با ترتیب درست require کن

*= require_tree .

بد نیست این را هم بدونی که OVERRIDE واژه درسته و در این زمینه یعنی لغو کردن مثلا کد یا style قبلی و برتری دادن به حالت جدید.

1 پسندیده

الان فهمیدم باید چه کنم باید از این

استفاده نکنم تو اون css ام

حالا جدا از این مبحث , بررسی Gem زیر مفید است