Приложение Rails с 500 моделями - PullRequest
2 голосов
/ 09 октября 2009

У меня есть приложение Rails, в котором у меня есть сотни моделей, в которых есть только операции CRUD. Я мог бы использовать scaffold / active scaffold, но в итоге у меня было так много файлов в каталоге приложения.

Можно ли сделать что-то вроде общей модели, представления и контроллера для обработки, а не иметь 500 из них в папке приложения.

Ответы [ 3 ]

7 голосов
/ 09 октября 2009

Конечно.

class GenericCrudController < ApplicationController
  def index
    current_model.find(:all)
  end

  private

  def current_model
    params[:model].constantize = Class.new(ActiveRecord::Base)
  end
end

Метод current_model создаст потомка ActiveRecord::Base на лету. Этот код, конечно, очень простой.

Обновление: это будет жаловаться, что constantize= метод не существует. Вы, вероятно, должны сделать что-то вроде этого: Kernel.const_set(params[:model], Class.new(ActiveRecord::Base)).

1 голос
/ 09 октября 2009

Я буду опираться на то, что сказал Август. Также есть ошибка. Должно быть:

  def current_model
    params[:model].constantize
  end

Возможно, вы захотите отфильтровать модель, которая может быть, в противном случае может возникнуть проблема, если у вас есть частные модели, к которым у них не должно быть доступа.

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

0 голосов
/ 09 октября 2009

Другой вариант - использовать плагин, который создает богатые CRUD-интерфейсы. Хорошим примером является ActiveScaffold . Создать интерфейс так же просто, как:

class UsersController < ApplicationController
  active_scaffold :user
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...