1

CityとNeighborhoodの2つのモデルを持つアプリがあります。ルートページで、collection_setを使用してすべての都市を表示します

<%= form_tag('/sales/neighborhood', :method => :get) %>`
  <%= collection_select(:neighborhood, :city_id, City.all, :id, :name) %>
  <%= submit_tag 'Go' %>

次に、次のビューページに、最初のページで選択した都市のIDと一致するcity_idを持つすべての近隣のドロップダウンリストを表示します。私はこの部分が正しいと思います、そして私はこのようなURLを取得するので、都市IDがパラメータで渡されていhttp://localhost:3000/sales/neighborhood?utf8=%E2%9C%93&city%5Bid%5D=1&commit=Goます。表示する近隣のリストを取得できません。私はsales#neighborhoodでこれを試しました

<%= form_tag('sales/locations', :method => :get) %>
<%= collection_select(:location, :neighborhood_id, @nbhds.all, :id, :name) %>
<%= submit_tag 'Go' %>

しかし、ドロップダウンボックスには何も表示されません。私はこれを試して、このように選択された都市のIDと一致するcity_idを持つ近隣のリストを取得しました...

<ul>
<% @nbhds.each do |n| %>
<li>
<%= n.name %>,
<%= n.city.name %>
</li>
<% end %>
</ul>

次に、2ページ目のcollection_setから選択されるneighborhood_idに基づいて、アプリケーションに一連の場所を一覧表示させます。誰かが私を正しい方向に向けることができますか?私はちょうどそれを手に入れました、ただ何かが欠けていると思います。

私のモデルは次のようになります。

class City < ActiveRecord::Base
  attr_accessible :name, :state
  has_many :neighborhoods
end

と:

class Neighborhood < ActiveRecord::Base
  attr_accessible :city_id, :name
  belongs_to :city
  has_many :locations
end

呼び出されているSalesコントローラーアクションは次のとおりです。

def neighborhood
@nbhds = Neighborhood.where(:city_id => params[:id])
end                                                   

私の問題はsales#neighborhoodのwhere句か私のビューのどちらかにあると思いますが、レールコンソールのビューからulのコードを入力すると、都市に属するすべての近隣が一覧表示されます。唯一の違いは私が使用したコンソール

nbhds = Neighborhood.where(:city_id => 1)

パラメータを介してアクセスする代わりに

誰かができるなら私はまだこれで助けが必要です

4

2 に答える 2

1

コレクションによると

<%= collection_select(:neighborhood, :city_id, City.all, :id, :name) %>

コントローラで取得する必要のあるパラメータは次のようになります

params[:neighborhood][:city_id]

しかし、GET URLによると、http://localhost:3000/sales/neighborhood?utf8=%E2%9C%93&city%5Bid%5D=1&commit=Go,送信している2つのパラメーターはcity [id]=1とcommit=Go "city%5Bid%5D = 1&commit=Go"のようです。

%5Bと%5Dは、それぞれ'['と']'のHTMLURLエンコードです。

これが正しいリクエストURLである場合、コントローラーでは[:id]ではなくパラメーター[:city] [:id]を使用します。

def neighborhood
  @nbhds = Neighborhood.where(:city_id => params[:city][:id])
end

私が言及した解決策のいずれかを試す前に、Railsログをチェックして正しいparamsキーを特定してください。

于 2013-02-03T20:54:25.393 に答える
0

クエリパラメータとして持っcity_idていますが、コントローラで探しparams[:id]ます。

私はそれをに変更します

def neighborhood
  city = City.find(params[:city_id])
  @nbhds = city.neighborhoods
end

それでも問題が解決しない場合は、明日見栄えを良くします:)

于 2013-02-03T20:24:03.590 に答える