Ruby on rails 创建rails表单,通过选择id重定向以显示另一个资源的路由
我试图建立一个下拉列表,其中包含通过db的状态和填充。在提交时,我希望应用程序直接指向各州的放映路线。唉,我犯了个错误 routes.rb文件包含:Ruby on rails 创建rails表单,通过选择id重定向以显示另一个资源的路由,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图建立一个下拉列表,其中包含通过db的状态和填充。在提交时,我希望应用程序直接指向各州的放映路线。唉,我犯了个错误 routes.rb文件包含: Rails.application.routes.draw do get 'app/index' resources :states root 'beerfinder#index' end class StatesController < ApplicationController def show @
Rails.application.routes.draw do
get 'app/index'
resources :states
root 'beerfinder#index'
end
class StatesController < ApplicationController
def show
@state = State.find(params[:id])
end
end
州控制器包含:
Rails.application.routes.draw do
get 'app/index'
resources :states
root 'beerfinder#index'
end
class StatesController < ApplicationController
def show
@state = State.find(params[:id])
end
end
class StatesController
应用程序控制器
class AppController < ApplicationController
def index
@states = State.all
end
end
class AppController
我的index.html.erb表格是:
<%= form_for :states, :url => states_path(@state) do |f| %>
<%=select_tag 'state', options_from_collection_for_select(@states, 'id', 'full_name')%>
<%= f.submit "Submit" %>
<% end %>
states_路径(@state)do|f|%>
状态表包含id和全名字段。当前,表单查找创建路由。如何在不使用js的情况下将此路由发送到状态视图?对于“获取”请求,
状态路径
路由到控制器上的索引操作是正常的。您可以使用state\u路径
route助手来访问show
操作。但是,state\u path
route helper需要显示资源的id。在表单级别,您不知道这一点,因为select标记中有许多选项,每个选项都有不同的id
从resources:states
路由访问show操作的正常方法是在URL路径中有id,例如/states/101
使用
和
将在请求中生成URL参数。您需要类似于/states/show?id=101的内容
以下方法可行,但我不确定这是否是Rails最常用的方法:
在routes.rb中的resources:states
route:
get 'states/show', to: 'places#show'
resources :states
然后,您的form_for成为form_标记(因为您没有使用单个资源):
并且您的select_标记
会更改,因此它会提交一个“id”URL参数:
select_tag :id, options_from_collection_for_select(@states, 'id', 'full_name')
使用JavaScript可能会更简单(不会弄乱定制的路由),但这是我能想到的最好的非JS解决方案。因此,get请求尝试将其指向索引操作,因此它并不存在。我尝试将其更改为“state_path”,但现在在尝试呈现表单No route matches{:action=>“show”,:controller=>“states”,:id=>nil}时出现错误缺少必需的键:[:id]感谢您对其进行了一些思考,如果没有任何正常的rails魔法,我想我可能只是走js路线,同意你的估计,这样做更简单。