2013-05-06 30 views
1

我有一個問題,我的Ruby on Rails的Web應用程序。Rails的服務器響應404 /銷燬請求

我有一個名爲來源, 在我routes.rb中,我添加了以下配置的模型類:

namespace :admins do 
    resources :sources do 
    collection do 
     get 'batch_new' 
     post 'batch_create' 
    end 
    end 
end 

當我運行rake routes,我可以看到:

admins_source GET /admins/sources/:id(.:format) admins/sources#show 
       PUT /admins/sources/:id(.:format) admins/sources#update 
       DELETE /admins/sources/:id(.:format) admins/sources#destroy 

但是當我通過點擊鏈接或提交表單, 發送這些請求,我總是得到404

這裏是的意見/管理員/源代碼/ _form.html.erb

<%= form_for [:admins, @source] do |f| %> 
    <% if @source.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@source.errors.count, "error") %> prohibited this source from being saved:</h2> 

     <ul> 
     <% @source.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 
    </div> 

    <div class="field"> 
    <%= f.label :url %> 
    <%= f.text_field :url %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

這裏是我的的代碼破壞的的意見/管理員/來源/ index.html的鏈接.erb

<%= link_to 'Destroy', admins_source_url(source), method: :delete, data: { confirm: 'Are you sure?' } %> 

這裏是在SourcesController

代碼
def destroy 
    @source = Source.find(params[:id]) 
    @source.destroy 

    respond_to do |format| 
     format.html { redirect_to admins_sources_url } 
     format.json { head :no_content } 
    end 
end 

此問題只發生在生產環境中。 開發環境就好。

我也沒有生產ENV資產預編譯開始我的服務器(麒麟)前。 我不知道如何解決這個問題。

這裏是我的環境:

操作系統:Ubuntu Linux操作系統的12.04 LTS

的Ruby版本:2.0.0-P0

的Rails版本:3.2.13

Rails的服務器:麒麟4.6。 2

生產數據庫:MySQL

數據庫發展:sqlite3的

+1

你能發表表格代碼嗎? – John 2013-05-06 06:47:55

+0

好的,我添加了一些可能導致此問題的代碼。 – Aetherus 2013-05-06 07:06:23

+0

我也想過外鍵約束,MySQL有但sqlite沒有。但是,我在MySQL中查看了我的表,並沒有發現任何表中的外鍵。也許'rake db:migrate'不會創建任何實際的外鍵。 – Aetherus 2013-05-06 08:53:56

回答

0

,因爲你有一些其他錯誤(如遷移,這是一個問題,還是一個未編譯的資產),你得到的錯誤。只要看看在生產日誌中找到真正的錯誤,因爲你發佈什麼這裏只是應該工作(如果你有1K分我也不會問這個,對不起,如果你做了檢查這些日誌:))

+0

嗨,雨果。除了缺少favicon.ico,我的生產日誌中沒有任何錯誤。我向** SourcesController#destroy **方法添加了一些日誌,將日誌級別更改爲調試,並重新啓動了我的服務器,但仍然沒有報告有關我的問題的錯誤。看起來** SourcesController#destroy **從未被調用過。 – Aetherus 2013-05-07 02:17:31

0

我終於找到了解。 即使存在屬性data-method="delete",瀏覽器也不能發送GET以外的請求時單擊超鏈接。

我已經刪除了這兩個SourcesController#顯示和相應的視圖,因爲來源是如此簡單,甚至index.html.erb可以顯示所有源的所有細節。

由於這種刪除操作,/ admins/sources /:id上的GET請求應該是DELETE,它會丟失其目標視圖。

我改變

<%= link_to 'Destroy', admins_source_url(source), method: :delete, data: { confirm: 'Are you sure?' } %> 

<%= button_to 'Destroy', admins_source_url(source), method: :delete %> 

那麼一切都只是確認消息罰款,但這並不影響我太多。

但是,仍然有一個問題: 請求在開發環境下如何調度,因爲與:method => :delete的超鏈接完美地工作?

+0

是的你是對的。因爲你寫了「但是當我通過單擊鏈接或表單提交發送這些請求」,所以我認爲問題必須出現在目標控制器中,所以我被誤導了。 – 2013-05-07 13:56:13

相關問題