在rails 3中创建子记录

时间:2011-08-24 22:09:57

标签: ruby-on-rails-3

我的领土模型

class Territory < ActiveRecord::Base
  attr_accessible :name, :publisher
  has_many :addresses, :dependent => :destroy
  validates :name, :presence => true, :uniqueness => true
end

我的地址模型

class Address < ActiveRecord::Base
  attr_accessible :name, :street, :district, :note
  belongs_to :territory
end

我有一张用于创建区域的表单和一个显示单一区域的视图。

我添加了一个表单,用于向地区显示视图添加地区。

这是我的地址控制器

class AddressesController < ApplicationController
  def new
    @address = Address.new
  end

  def create
    @address = territory.addresses.build(params[:address])

    if @address.save
      flash[:success] = "Address saved!"
      redirect_to '/territories'
    else
      redirect_to '/territories'
    end
  end
end

看起来我无法掌握当前领土的身份,因此无法将地址连接到领土。我怎么能这样做?

此外,在保存之后我想显示当前视图,即再次显示区域显示视图。没有显示如何重定向......

我的路线

TerritoryManagement::Application.routes.draw do
  resources :addresses
  resources :territories
end

由于 托马斯

1 个答案:

答案 0 :(得分:0)

您需要使用嵌套资源,official Routing Guide中对此进行了解释。这个嵌套资源的另一个很好的例子是official Getting Started Guide

有了这个,当您为该地区创建一个新地址时,您应该在params[:territory_id]中收到一个AddressesController变量,然后您可以通过这样做找到Territory

Territory.find(params[:territory_id])

但不是我在这里重复一遍,我真的建议你阅读这两本指南。