0

私はアプリケーションを構築していますが、このようなモデルがあります

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/seed を使用して地区と地域を追加しています

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

ご想像のとおり、これは面倒なので、選択メニューを使用して地区を追加し、それを適切な地域に関連付けることができる単純なフォームを作成したいと考えています。

だから、これは私のdistricts\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は初めてなので、正しく行う方法がわかりません。どうすれば実装できますか?

4

1 に答える 1

1

パラメーターcollection_selectの名前が間違っており、コントローラーのモデル ルックアップが正しくないパラメーターにキー設定されています。こちらのRails のドキュメントを参照してください。

次のようなものが機能します。

# 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
于 2013-06-03T16:20:23.253 に答える