我正在使用这指南创建简单的动态选择。
我已经完成了一半,但是当我从下拉菜单中选择区域时,它不会显示任何子记录。在我的例子中,各州。
我使用Firebug检查错误,我在选择区域之后就得到了西塞错误。上面写着
No route matches [GET] "/update_states"但是我再次检查了我的routes.rb文件,如下所示:
get 'home/update_states', as: 'update_states'
get 'home/show'所以我想知道是什么导致了这个错误?
Home_controller.rb
class HomeController < ApplicationController
def index
@form = Form.new
@regions = Region.all
@states = State.where("region_id = ?", @regions.first.id)
end
def show
@state = State.where("id = ?", params[:form][:state_id])
end
def update_states
@states = State.where("region_id = ?", params[:region_id])
respond_to do |format|
format.js
end
end
end提前谢谢。
发布于 2014-09-16 15:15:37
您需要映射路径以包括控制器和操作。
get 'home/update_states' => 'home#update_states', as: 'update_states'
get 'home/show' => 'home#show'此映射要求您有一个HomeController,它有两个方法(操作) update_states和show。
第二个问题是,您正在/update_states上执行一个/update_states,但是您还没有映射它!
试着选择/home/update_states路线。
若要检查所有可用的路由和映射,请在控制台中使用rake routes。
编辑:
好的,看看您的HomeController,您的update_states操作查找具有region_id匹配的params[:region_id]的状态。但这不可能在任何地方通过!
要做到这一点,一种方法是将路线改为如下:
get 'home/:region_id/update_states' => 'home#update_states', as: 'update_states'这样就会改变路线
GET /home/12/update_states这将查找带有region_id=12的状态。
请注意,这只是传递参数的一种方式,您需要确保路由模式不发生冲突。
发布于 2014-09-16 14:45:52
上面的代码没有正确地引用controller#action。就像这样,
get 'home/update_states' => 'home#update_states', as: 'update_states'
get 'home/show' => 'home#show'发布于 2014-09-16 14:48:45
我认为最好的方法是:
match '/update_states' => 'home#update_states', :as => 'update_states'
match '/show', to: 'home#show', via: 'get'https://stackoverflow.com/questions/25871743
复制相似问题