2013-06-03 20 views
0

我建立一個應用程序,我有一個模型這樣如何創建和保存具有的has_many的模型/ belong_to協會

class Region < ActiveRecord::Base 
    attr_accessible :region_name 
    has_many :districts, dependent: :destroy 
end 

class District < ActiveRecord::Base 
    attr_accessible :district_name 
    belongs_to :region 
    has_many :counties, dependent: :destroy 
    validates :region_id, presence: true 
end 

我一直在增加使用DB /種子區和地區,像這樣

region1 = Region.find_or_create_by_region_name :region_name => 'Central' 
district1 = region1.districts.create(district_name: 'Kampala') 

現在,你可以想象這麼麻煩,所以我想創建一個簡單的表單,我可以添加一個區域並使用選擇菜單將其與正確的區域相關聯。

所以這個我區\ new.html.erb視圖

<div class="region"> 
<%= form_for (@district) do |f| %> 
<%= f.label :region %> 
<%= f.collection_select :region, Region.all,:id, :region_name, :prompt => "-- Select  Region --" %> 
<%= f.label :district %> 
<%= f.text_field :district_name %> 
<%= f.submit "Add District", class: "btn btn-large btn-primary" %> 
<%end%> 
</div> 

這是因爲你希望不工作我區控制器創建方法

def create 
    @region = Region.find_by_region_name(params[:region_name]) 
    @district = @region.districts.create!(params[:district]) 
    if @district.save 
    redirect_to :districts_path, :notice => "District added" 
    else 
     render :new 
    end 
end 

此。對於rails來說是新的,所以我不確定如何正確執行它。我如何實現它?

+0

如果使用的是選擇菜單,你不會是能夠從這種形式進入一個新的區域。這很重要嗎? – PinnyM

+0

您收到了什麼錯誤?或者它不是保存區域/地區? – zeantsoi

回答

1

您的collection_select參數名稱錯誤,您的控制器中的模型查找被鎖定爲不正確的參數。請參閱Rails documentation here

像這樣的工作:

# app/views/districts/new.html.erb  
<%= collection_select :region, :region_id, Region.all, :id, :region_name, :prompt => "-- Select  Region --" %> # notice that `collection_select` is not being passed to `f` 

# app/controllers/districts_controller.rb 
def create 
    @region = Region.find(params[:district][:region_id]) 
    ... 
end