У меня есть модель Post
, которая используется для хранения контента, размещенного гостевыми пользователями, и этот контент управляется администратором.Администратор имеет право заблокировать или разблокировать конкретный пост.
Я хочу сделать следующее:
- Показать все разблокированные сообщения для гостевых пользователей.
- Показать все сообщения для администратора.
Для первого требования у меня есть модель BlockedPost
, которая имеет полиморфную ассоциацию с моделью Post
.Сообщение, которое будет заблокировано администратором, будет сохранено в модели BlockedPost
.
Для второго требования я должен предоставить администратору право блокировать или разблокировать любой конкретный контент.Итак, в моем posts/index.html.erb
я сделал это
<% @posts.each do |post| %>
<% post.content %>
<% if post.post_blocked? %>
<td><%= link_to 'Unblock', blocked_post_path(content.id),:method => :delete%></td>
<% else %>
<td><%= link_to 'Block', create_blocked_post_path(content.id) %></td>
<% end %>
<% end %>
Вышеуказанный метод post_blocked?
определен в модели Post:
class Post < ActiveRecord::Base
def post_blocked?
!self.blocked_posts.nil?
end
end
Это работает, но проблема возникает каждый раз, когдаpost_blocked?
метод вызывается он делает вызов базы данных.
Есть ли способ остановить это поведение и получить статус всех сообщений в одном вызове базы данных?