Как создать и использовать переменную в шаблоне VIews в Rails?
Я по-прежнему новичок в рубине и рельсах и стараюсь создать переменную, поэтому я могу использовать ее снова и снова в шаблоне представлений. Например, мой код сейчас
<title>Home Page</title>
<h3>Welcome to my Home Page</h3>
Теперь я хочу сделать эту "домашнюю страницу" переменной или символом, чтобы я мог просто использовать эту переменную/символ, а не печатать строку снова и снова, как это сделать?
Спасибо
Ответы
Ответ 1
Когда я впервые прочитал ваш вопрос, я подумал, что вы просите this, но я понимаю, что это другое.
Michael Hartl amazing Учебник Ruby-on-Rails демонстрирует мой любимый метод для этого, который заключается в создании переменной экземпляра, на которую ссылаются в макете точно так, как вы хотите.
rails_root/приложение/контроллеры/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
attr_accessor :extra_title
...
Это делает доступным @extra_title
для всех контроллеров. Теперь внутри одного конкретного контроллера:
rails_root/приложение/контроллеры/things_controller.rb
class ThingsController < ApplicationController
def index
@extra_title = "| Things"
...
Хорошо, для чего это все? О, верно, мы хотели использовать это в макете:
rails_root/приложение/просмотров/макеты/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Best. App. Ever. <%= @extra_title %></title>
...
И теперь вы едете на Rails.
Ответ 2
Вы можете использовать переменную экземпляра prefixed by @
, чтобы она могла использоваться во всем вашем представлении.
Например:
Контроллер:
@my_home = "Home Page"
Вид:
<title><%= @my_home %></title>
Ответ 3
Чтобы сделать это, вы используете макет или частичный. Здесь есть хороший проводник: http://guides.rubyonrails.org/layouts_and_rendering.html
Вы можете поместить этот контент в файл app/views/layout/application.html.erb, и он будет использоваться как ваш макет по умолчанию.
Другое, что вы можете сделать, это создать частичный, так что вы можете создать файл, подобный /app/views/shared/ _header.html.erb, с этим контентом, а затем вы можете отобразить его из любого представления, написав
render partial: '/shared/header.html.erb'