2011-08-24 90 views
1

我的领地模型在轨道创建子记录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 

看起来,我不能让当前的领土ID的保持,因此不能将地址连接到境内。我怎样才能做到这一点?

另外,保存后,我想再次显示当前视图,即区域显示视图。没有说明如何做到这一点重定向...

我的路线

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

感谢 托马斯

回答

0

您需要使用嵌套资源对于这一点,这是在official Routing Guide解释。这个嵌套资源的另一个很好的例子是official Getting Started Guide

有了这个,你应该得到params[:territory_id]变量在AddressesController当你为当地一个新的地址,并从你就可以通过这样找到Territory

Territory.find(params[:territory_id]) 

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

+0

我已经改变了我的routes.rb到TerritoryManagement :: Application.routes.draw做 资源:境内做 资源:地址 结束 结束 但是现在它说,它看起来/地址并不能找到它。从您指出的指南我明白,这将添加所有的下游路线。我完全不知道我错过了什么。 – Thomas

+0

在我的地区列表中我有一个链接来显示特定地区​​<%= link_to'显示',territory_address_path(@territory,@address)%>当我打电话给列表,然后我得到没有路线匹配{:controller = >“addresses”,:action =>“show”}对不起,我只是不明白。 – Thomas

+0

@Thomas:我真的会*推荐阅读入门指南的例子,并与此相关。这应该给你足够的基本理解,以将它翻译成你想在这里做的事情。它基本上是一样的,但名称不同。 –