Rails 3 вложенных ресурса или нет? - PullRequest
4 голосов
/ 30 января 2012

У меня есть «Компания», в которой есть «Проекты».Со временем нам нужно добавить «Ссылки», связанные с «Проектами».Мои маршруты в настоящее время выглядят следующим образом:

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другие вообще не гнездятся.

Итак, каков наилучший способ сделать это, чтобы у меня были «Связи» и другие модели, связанные с «Проектами», в то время как «Проекты» остаются связанными с «Компаниями»

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Вы можете справиться с этим с помощью мелких вложенных маршрутов, таких как:

resources :companies do
  resources :projects
end

resources :projects do
  resources :links
  resources :sausages
  resources :patties
end

Тогда у вас есть маршруты, такие как new_company_project_path, new_project_link_path и т. Д.

0 голосов
/ 31 января 2012

Вложенные маршруты и модели "вложения" - это две разные вещи.

Вложите ваши модели так, как вы это делаете, теперь все в порядке.

Что касается маршрутов, рассмотрите возможность сделать их shallow, как объяснено здесь и здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...