Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 创建rails表单,通过选择id重定向以显示另一个资源的路由_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 创建rails表单,通过选择id重定向以显示另一个资源的路由

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 @

我试图建立一个下拉列表,其中包含通过db的状态和填充。在提交时,我希望应用程序直接指向各州的放映路线。唉,我犯了个错误

routes.rb文件包含:

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路线,同意你的估计,这样做更简单。