Rails:嵌套资源并指定“nester”

时间:2013-05-06 06:04:17

标签: ruby-on-rails-3

公司有很多房产。物业有一家公司。

在我的路线文件中,我得到了:

resources :companies do
  resources :property_managers
end

在property_manager_controller中,我的create操作看起来像这样(默认的脚手架实现稍作修改以适应公司):

def create   
@property_manager = PropertyManager.new(params[:property_manager])
@property_manager.company_id = params[:company_id]

respond_to do |format|
  if @property_manager.save
    format.html { redirect_to company_property_managers_path, notice: 'Property manager was successfully created.' }
    format.json { render json: @property_manager, status: :created, location: @property_manager }
  else
    format.html { render action: "new" }
    format.json { render json: @property_manager.errors, status: :unprocessable_entity }
  end
end

有没有办法我不必显式设置company_id,因为它在URL /路由的上下文中是已知的?

1 个答案:

答案 0 :(得分:0)

我想你可以做类似以下的事情,不确定它是否更好:

class PropertyManagersController < ApplicationController
  before_filter :find_company

  def new
    @property_manager = @company.property_managers.build
  end

  def create
    @property_manager = @company.property_managers.build(params[:property_manager])
    respond_to do |format|
      ...
    end
  end

  private

  def find_company
    @company ||= Company.find(params[:company_id])
  end

end