У меня есть экземпляр переменной @posts_by_month
, определенный в двух контроллерах и используются в двух видах:Как разделить код между двумя контроллерами
Сообщения Контроллер:
class PostsController < ApplicationController
def index
@posts = Post.all
@posts_by_month = Post.all.group_by { |post| post.created_at.strftime("%L") }
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
.
.
end
Архивы контроллер:
class ArchivesController < ApplicationController
def index
@posts_by_month = Post.all.group_by { |post| post.created_at.strftime("%B") }
end
end
Индексный индекс:
<h1>Listing posts</h1>
.
.
.
<div>
<% @posts_by_month.each do |millisecond, posts| %>
<p><%= millisecond %>milliseconds <%= posts.count %></p>
<% end %>
</div>
Archives посмотреть индекс:
<% @posts_by_month.each do |monthname, posts| %>
<%= monthname %>
<ul>
<% posts.each do |post| %>
<h3><%= post.title %></h3>
<p><%= post.body %></p>
<% end %>
</ul>
<% end %>
У меня есть два вопроса. Есть ли способ определить переменную экземпляра @posts_by_month
, чтобы я мог иметь это доступное обоим представлениям, не повторяя его в каждом соответствующем контроллере?
Во-вторых, существует ли способ, посредством которого миллисекундная часть <p><%= millisecond %>milliseconds <%= posts.count %></p>
может быть переведена в ссылку, ведущую к просмотру архива?
Примечание: в моем приложении миллисекунда будет заменено на месяц, как в режиме архива.
У вас есть ссылка на то, где говорится, что состояние контроллера копируется для создания состояния представления? Я предпочел бы (и надеюсь), что состояние контроллера будет доступно через прокси-сервер в представлении, и нет ненужного копирования (если не сделать явно, например, заменяя шаблоны и т. Д.), – Domi