1

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

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

然后,我想在下面的视图页面中包含一个包含与第一页上选择的城市 id 匹配的 city_id 的所有社区的下拉列表。我认为我的这部分是正确的,并且城市 ID 正在参数中传递,因为我得到了这样的 url http://localhost:3000/sales/neighborhood?utf8=%E2%9C%93&city%5Bid%5D=1&commit=Go。我只是无法获得要显示的社区列表。我在销售#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>

然后,我希望应用程序根据从第二页的 collection_set 中选择的 neighbor_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

这是调用的销售控制器操作:

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

我认为我的问题是在 sales#neighborhood 中的 where 子句中或在我看来,但我将 ul 的代码从视图中的 rails 控制台中列出,它列出了属于该城市的所有社区,唯一的区别在于我使用的控制台

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,,您发送的两个参数似乎是 city[id]=1 和 commit=Go "city%5Bid%5D=1&commit=Go"

%5B & %5D 分别是 '[' & ']' 的 HTML url 编码。

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

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

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

于 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 回答