Share Controller Actions / Объекты на Rails - PullRequest
1 голос
/ 05 апреля 2020

Как Rails Rook ie Интересно, как правильно повторно использовать код, взаимодействующий с объектами базы данных. Например, у меня есть:

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  def index
    @posts = Post.all
  end

end

У меня также есть страница приветствия с контроллером приветствия:

class WelcomeController < ApplicationController
  def index
    @posts = Post.all
  end
end

Я также хотел бы показать тот же список сообщений на странице приветствия. Я реализовал частичное представление для сообщений и использовал его в представлении приветствия, но повторение того же запроса базы данных на контроллере приветствия кажется неправильным способом сделать это, поскольку я повторяюсь.

Я также вызвал другой контроллер действие, подобное этому, но я не знаю, приемлемо ли это.

class WelcomeController < ApplicationController
  def index
    @posts = PostsController.new.index
  end
end

Интересно, существует ли правильный путь (путь рельсов) для распределения действий между контроллерами. По сути, из WelcomeController вызовите index действие PostsController, поэтому мне не нужно реализовывать повторить метод

1 Ответ

3 голосов
/ 05 апреля 2020

Хороший вопрос!

Может показаться слишком много повторений, но вполне нормально повторять запрос к базе данных в контроллерах. Не создавайте экземпляр нового экземпляра контроллера, а затем вызывайте метод index для него, как вы это сделали.

Помните, что HTTP-запросы направляются на правильное действие контроллера, а затем визуализируют представление. Так что рефакторинг одних и тех же представлений в части и их рендеринг - это прекрасно, но не беспокойтесь о повторном коде в контроллерах, особенно если это простой запрос.

Как только ваше приложение будет расти, у вас будет больше код в контроллерах, и это не будет выглядеть так многократно. Если у вас есть большие блоки кода, которые повторяются, вы можете работать с проблемами ( Как использовать задачи в Rails 4 , они также работают для моделей).

...