2010-02-02 46 views
0

我有一個網站,在我包含設計和一些更改(佈局,腳本等)之前,它工作正常。然後,我不知道發生了什麼,但是我的select字段中的onChange方法正在訪問「show」操作,而不是在行中寫入的操作。在onChange上訪問錯誤的控制器動作的字段

我有我的新觀點如下:

<%= collection_select('category', 'id', @categories, 'id', 'name', {:prompt => "Choose a category"}, {:onchange => "#{remote_function(:url => {:controller => 'announcements', :action => "update_subcategories"}, :with => "'parent_id='+value")}",:class => 'newAd_box2_inputField'}) %> 

的想法是,它更新與相關選擇的一個記錄的第二選擇字段。

第二選擇看起來是這樣的:

<%= render :partial => 'category_select', :object => @subcategories %> 

再次,它是偉大的工作之前,我介紹了一些變化,但現在它只是不會去「update_subcategories」行動,它只是「秀」。

在我的routes.rb我有以下幾點:

map.show "/announcements/:permalink", :controller => 'announcements', :action => 'show' 
    map.new "/announcements/new", :controller => 'announcements', :action => 'new' 

有誰知道這是怎麼回事?

+0

你還有'AnnouncementsController#update_subcategories'的路由嗎?在您發佈的'routes.rb'文件中,只有通往'AnnouncementsController#show'和'AnnouncementsController#new'的路由。爲'new'視圖生成的Javascript/HTML是什麼樣的? – 2010-02-02 18:54:28

回答

1

這是你的問題:

map.show "/announcements/:permalink", :controller => 'announcements', 
    :action => 'show' 

Rails會使用第一條路線出現在routes.rb中給定的參數相匹配。當使用url_for生成url輸出(這是remote_function的url選項在後臺執行的操作)並將服務器接收到的url映射到操作時,這種行爲會同時發生。

上述路由將生成路由/announcments/update_subcategories,因此當您在瀏覽器中查看源代碼時,鏈接將顯示正確。但是當你轉到那個鏈接時,Rails會將它與公告控制器的顯示操作相匹配。

該修復取決於您使用哪種方法來爲通知控制器定義路由。無論您使用哪種修補程序,它都必須在不良路線之前出現。 (map.show "/announcements/:permalink", :controller => 'announcements', :action => 'show'

如果您使用的是寧靜路線,修復方法是在定義中添加:collection選項。

map.resources :announcements, :collection => {:update_subcategories => :get} 

如果您不使用寧靜的路線,修復方法是添加路線。

map.connect "/announcements/update_subcategories", 
    :controller => "announcements", :action => "update_subcategories" 
+0

我會試試看,謝謝。 – 2010-02-02 19:24:50

+0

工作正常!謝謝!! – 2010-02-02 20:05:37

相關問題