Достигнутое мной решение:
(1) Область применения шаблонов, созданных администратором.Не показывать дубликаты.
app / models / template.rb
scope :unique_title, where(admin: true).order(:title).select("DISTINCT title").select(:id)
(2) Соберите шаблоны в форме
project / create.html.haml
= simple_form_for @project do |f|
= simple_fields_for :template do |template_form|
= template_form.input :id, collection: admin.templates.unique_title
(3) Создайте новый проект и затем вызовите метод в Project для создания нового шаблона на основе атрибутов @ template
app / controllers / projects_controller.rb
def create
@project = Project.new(params[:project[)
@template = Template.find(params[:template][:id])
if @project.save
@project.create_new_template(@template)
....normal stuff here....
end
(4) Создайте новый объект шаблона в Project
def create_new_template(template)
self.build_template do |t|
t.title = template.title
...other template attributes here....
t.save!
end
end
Это работает, но я хочу принять душ ... контроллер слишком запутан.Я хотел бы создать новый шаблон after_create в Project, однако я не уверен, как получить доступ к параметрам шаблона.Выложу решение, если смогу рефакторинг.Если у кого-то есть предложения / критика, они очень принимаются