我有一个“公司”,里面有“项目”。随着时间的推移,我们现在需要添加与“项目”相关的“链接”。我的路线目前如下所示:
resources :companies do
resources :projects do
resources :links
end
end
这似乎是错误的,因为嵌套2层深。如果我像这样嵌套,我现在也不再拥有new_company_project_path(@company)
了,现在我拒绝为公司创建项目。
我将需要在未来几个月内添加其他与项目相关的模型。
这是我的Projects模型和我的Links模型..
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层深,而其他的根本没有嵌套。
那么,最好的方法是什么,以便我可以拥有“链接”和其他与“项目”相关的模型,而“项目”仍然与“公司”相关?
答案 0 :(得分:3)
您可以使用浅层嵌套路径处理它,如下所示:
resources :companies do
resources :projects
end
resources :projects do
resources :links
resources :sausages
resources :patties
end
然后你有像new_company_project_path,new_project_link_path等路线。
答案 1 :(得分:0)