У меня есть «Компания», в которой есть «Проекты».Со временем нам нужно добавить «Ссылки», связанные с «Проектами».Мои маршруты в настоящее время выглядят следующим образом:
resources :companies do
resources :projects do
resources :links
end
end
Это кажется неправильным из-за глубины вложения 2 уровня.У меня также больше не будет new_company_project_path(@company)
, если я буду так гнездиться, что теперь лишает меня возможности создавать проекты для компании.
Мне нужно будет добавить другие модели, которые будут относиться к проектам в ближайшие месяцы.
Вот моя модель проектов, а также моя модель ссылок ..
class Link < ActiveRecord::Base
attr_accessible :link_name, :url, :description
belongs_to :project
end
class Project < ActiveRecord::Base
belongs_to :company
belongs_to :user
validates :title, :presence => true
validates :description, :presence => true,
:length => { :minimum => 10 }
end
Казалось бы, вложение не является правильным способом.Если вложение не является правильным способом, как можно сохранить ассоциацию?Например, в моем текущем контроллере я сохраняю свои вложенные объекты, выполняя это:
class ProjectsController < ApplicationController
before_filter :authenticate_user!
before_filter :find_company
def new
@project = @company.projects.build
end
def create
@project = @company.projects.build(params[:project])
if @project.save
flash[:notice] = "Project has been created."
redirect_to [@company, @project]
else
flash[:alert] = "Project has not been created."
render :action => "new"
end
end
private
def find_company
@company = Company.find(params[:company_id])
end
end
Я не могу найти слишком много информации по этому предмету и книгам, которые я читал до того, как использовал вложения, только на глубину 1другие вообще не гнездятся.
Итак, каков наилучший способ сделать это, чтобы у меня были «Связи» и другие модели, связанные с «Проектами», в то время как «Проекты» остаются связанными с «Компаниями»