2014-10-06 20 views
1

我正在構建一個Web界面以伴隨我正在構建的移動應用程序。我有一個下拉選擇菜單,列出了一堆位置。嘗試在我的控制器中觸發一個操作,當在下拉菜單中選擇一個選項但獲取一個無路由匹配錯誤

在選擇一個位置時,我想打電話給我的控制器中的某個方法,並在選定的位置(每個位置有多個目的地)內抓取一些目的地。

然後,我想用這些結果呈現我的展示模板,以允許用戶選擇目的地並進行預訂。

這是我到目前爲止有:

我和度假村的列表視圖:

<%= form_tag :url => { :action => :show } do %> 
<%= select_tag :resort , options_for_select(@resorts), :prompt => 'Select Resort', :onchange => 'submit()' %> 
<% end %> 

控制器:

class HomeController < ApplicationController 
    def index 
      @resorts = ["A","B", "C", "D", "E"] 
    end 

    def new 
    end 

    def edit 
    end 

    def create 
    end 

    def show 
    @activities = Parse::Query.new("Activity").tap do |a| 
     a.eq("resort", params[:resort]) 
    end.get 
    end 

end 

稍稍困惑。考慮到CRUD,使用form_for對我來說更有意義,也是因爲表單是基於對象的。

我想採取選定的手段,並將其傳遞到我的控制器中的方法,進入數據庫並抓取一堆目的地。然後,我想在我的展示頁面上列出這些目的地,用戶可以點擊它們並將其帶到另一個可以在該目的地進行預訂的頁面。

我上面的代碼不起作用。我有資源:在我的路線文件中。

然而,當我嘗試用格式加載我的網頁,我得到:

No route matches {:action=>"show", :controller=>"home"} missing required keys: [:id] 

如何我拉這一關?

我去了我的lynda帳戶,拿出了一個鐵軌基本教程,明天我會用一段時間來刷新我的記憶,但導師不包括使用select_tag。

將不勝感激這裏一些幫助

感謝您的時間

+0

*使用form_for對我更有意義* - 爲什麼你使用'form_tag'而不是'form_for'呢? – zetetic 2014-10-06 23:21:58

回答

0

在你的路線,增加

get '/choose_resort' => 'home#show' #you can name the get whatever 

然後在你的形式...

<%= form_tag choose_resort_path do %> 

話雖這麼說...您應該在單獨的端點上查詢,然後重定向到顯示頁面。這應該讓你感動,想想。

1

所以有一些想法。不知道你爲什麼使用form_tag,也不知道爲什麼你不使用Rails慣用約定。

聲明的資源在你的routes@resorts,像這樣:

resources :resorts 

那麼就使用Rails的form_for幫手,如:

<%= form_for @resorts, url: {action: "create"}, html: {class: "nifty_form"} do |f| %> 
    <%= f.select :resort, (insert your other options) %> 
    <%= f.submit "Create" %> 
<% end %> 

我沒有測試上面的代碼,所以玩的它,但這應該工作。

但是,讓我省了一些頭痛。結帳SimpleForm

對於您的模型,您需要設置您的位置和目的地之間的關聯。

class Location < ActiveRecord::Base 
    belongs_to :resort # or whatever the relation is 
    has_many :destinations 
end 

class Destination < ActiveRecord::Base 
    belongs_to :location # This assumes there is just a one-to-many relationship between Location and Destination 
end 

確保您有一個LocationsController所有的操作。

在這種情況下,您的SimpleForm形式會是這個樣子:

<%= simple_form_for @locations do |f| %> 
    <%= f.input :name %> 
    <%= f.association :password %> 
    <%= f.button :submit %> 
<% end %> 

這種做法會讓你的生活變得更輕鬆。查看簡單表單中的收集方法。 Rails可以通過內置的表單助手讓你的生活變得困難。

希望有幫助!

+0

事情是這個rails應用程序不是基於模型的。我沒有使用活動記錄。我的數據來自parse.com – LondonGuy 2014-10-07 08:56:27

0

show操作需要您顯示的對象的id。改變你的控制器:

class HomeController < ApplicationController 
    def index 
    @resorts = [["A",1], ["B",2], ["C",3], ["D",4], ["E",5] ] 
    end 

而且你的觀點

<%= select_tag :id , options_for_select(@resorts), :prompt => 'Select Resort', :onchange => 'submit()' %> 

,讓您的show行動的適宜度假ID。您必須調整該行動才能找到與度假村相關的正確活動。

相關問題