Как создать и использовать переменную в шаблоне 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'