显示基于从collection_set中选择的另一个模型的id的数据列表

时间:2013-01-15 02:58:38

标签: ruby-on-rails drop-down-menu

我有一个应用程序,有2个模型,城市和邻居。在根页面上,我使用collection_set显示所有城市

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

然后,我希望在以下视图页面中显示所有社区的下拉列表,其中city_id与第一页上选择的城市的ID相匹配。我认为我有这个部分是正确的,并且城市id正在通过参数,因为我得到了这样的网址http://localhost:3000/sales/neighborhood?utf8=%E2%9C%93&city%5Bid%5D=1&commit=Go。我只是无法获得要显示的社区列表。我在销售#邻里

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

但我在下拉框中什么都没得到。我甚至尝试过这个只是得到一个街区列表,其中city_id与这样选择的城市的id相匹配......

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

然后,我希望应用程序根据neighborhood_id列出一组位置,这些位置将从第二页上的collection_set中选择。任何人都能指出我正确的方向吗?我想我刚刚得到它,只是遗漏了一些东西。

我的模特看起来像这样:

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#邻居的where子句或我的视图中,但是我从rails控制台的视图中输入了ul的代码,它列出了属于该城市的所有邻居,唯一的区别在于我使用的控制台

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

而不是通过参数

访问它

如果有人可以

,我仍然需要帮助

2 个答案:

答案 0 :(得分:1)

根据收藏选择

<%= collection_select(:neighborhood, :city_id, City.all, :id, :name) %>
你应该进入控制器的

参数就像

params[:neighborhood][:city_id]

但根据您的GET网址http://localhost:3000/sales/neighborhood?utf8=%E2%9C%93&city%5Bid%5D=1&commit=Go,,您发送的两个参数似乎是city [id] = 1和commit = Go“city%5Bid%5D = 1&amp; commit = Go”

%5B&amp; %5D是'['&amp ;; '''分别。

如果这是正确的请求网址,那么在您的控制器中,您宁愿使用参数[:city] [:id]而不是[:id]

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

在开始尝试我提到的任何解决方案之前,请检查您的rails日志以确定哪个是正确的params密钥。

答案 1 :(得分:0)

您有city_id作为查询参数,但您在控制器中查找params[:id]

我会改为

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

如果这不能解决你的问题,我明天会更好看:)