2016-04-07 44 views
1

我想構建一個包含狀態和通過數據庫填充的下拉列表。提交時,我希望該應用直接顯示各州的展示路線。唉,我得到一個錯誤。創建導軌形式,通過選擇ID重定向顯示另一個資源的路由

的的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 

該應用程序控制器

class AppController < ApplicationController 
    def index 
    @states = State.all 
    end 
end 

我對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 %> 

狀態表包含id和full_name字段。目前,該表單查找創建路線。如何在不使用js的情況下將這條路徑設置爲狀態視圖?

回答

2

這是states_path路由到索引對於'get'請求的控制器上的操作是正常的。您可以使用state_path路由幫助程序進入show操作。但state_path路由幫助程序需要顯示資源的ID。你不知道在表單級別,因爲select標籤有很多選項,每個選項都有不同的id。

resources :states路線訪問show動作的正常方式是在URL路徑中存在id,例如。 /states/101

使用<form><select>將在請求中生成一個URL參數。你需要類似/states/show?id=101

下工作,但我不知道它是做的最Rails的-Y方式:

創建一個新的「/美國/顯示」替代路線在routes.rb中(無:在ID該URL)之前resources :states路線:

get 'states/show', to: 'places#show' 
resources :states 

那麼你的form_for變成的form_tag(因爲你不是一個單一的資源工作):

form_tag :url => states_show_path, :method => :get 

和你select_tag更改,以便將其提交一個「身份證」 URL PARAM:

select_tag :id, options_from_collection_for_select(@states, 'id', 'full_name') 

這將是簡單的JavaScript(不定製路線瞎搞),但是這是最好的非JS解決方案,我能想到的。

+0

因此,get請求確實嘗試並將其指向索引操作,所以它不在那裏。我嘗試將其更改爲'state_path'並且它現在嘗試呈現表單時出錯 沒有路由匹配{:action =>「show」,:controller =>「states」,:id => nil}需要的鍵:[:id] – notthehoff

+1

我看到問題了,我馬上更新答案。 –

+1

謝謝你的一些想法,如果沒有任何正常的鐵軌魔術,我想我可能只是走js路線,並同意你的估計,這樣做更簡單。 – notthehoff

相關問題