我有一个应用程序,有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)
而不是通过参数
访问它如果有人可以
,我仍然需要帮助答案 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
如果这不能解决你的问题,我明天会更好看:)