2014-09-25 73 views
4

我正在嘗試將一個鏈接顯示到由rails動作郵件呈現的視圖中。ActionMailer link_to show action failed with「missing required keys:[:id]」

mailer.rb

class Mailer < ActionMailer::Base 
    default from: "[email protected]" 

    def catalog_download_request(email, catalog) 
    @catalog = catalog 

    mail({ 
     to: email 
    }) 
    end 

end 

的routes.rb

Rails.application.routes.draw do 

    scope "(:locale)" do 
    resources :catalogs, :path => I18n.t("routes.catalogs"), only: [:index, :show] 
    end 

end 

development.rb:

config.action_mailer.default_url_options = { host: "http://localhost:3000" } 
config.action_mailer.asset_host = "http://localhost:3000" 

config.action_mailer.delivery_method = :smtp 

config.action_mailer.smtp_settings = { 
    address: "localhost", 
    port: 1025 
} 

config.action_mailer.raise_delivery_errors = false 

我的模型,其中我打電話郵件:

class CatalogDownloadRequest < ActiveRecord::Base 
    belongs_to :catalog 

    after_create :send_mail 

    private 

    def send_mail 
    Mailer.catalog_download_request(email, catalog).deliver 
    end 

end 

這就是我在我看來試過:

<%= link_to @catalog %> 

錯誤:

ActionView::Template::Error: No route matches {:action=>"show", :controller=>"catalogs", :format=>nil, :id=>nil, :locale=>#} missing required keys: [:id]

另一個嘗試:

<%= link_to catalog_url(@catalog) %> 

錯誤:

ActionView::Template::Error: No route matches {:action=>"index"}

我懷疑這是發生因爲我的航線範圍區域。

如果我在另一個視圖中使用<%= link_to catalog_url(@catalog) %>,它可以工作。

解決了:

<%= link_to catalog_url(:id => @catalog.id), catalog_url(:id => @catalog.id) %> 
+0

對我來說同樣的錯誤。 即使嘗試最簡單的示例'<%= recording_url(@recording)%>'或'<%= recording_path(@recording)%>' 這是非常基本的Rails應用程序,沒有任何特別的。 – Schovi 2014-10-08 13:17:38

+0

我認爲你需要做和我一樣的工作:'recording_url(:id => @ recording.id)' – 2014-11-06 12:42:34

回答

6

原因ActionView::Template::Error: No route matches {:action=>"index"}是:

link_to需要兩個參數(文字和網址)(api)。你只通過一個。在將文本作爲第一個參數傳遞後,它將正常工作。

如果你真的想,根據文件,你傳遞零作爲第一個參數,然後網址作爲第二個。

+0

link_to只用一個參數就可以很好地工作,它以url作爲文本呈現鏈接。 – 2014-11-05 13:43:02

+0

對於我的回答有問題,我很抱歉,但您的回答對我來說還不夠清楚,因爲在其他視圖中,代碼可行,而在電子郵件視圖中則不行。所以,link_to與單個參數一起工作,而不是在那個特定的情況下。我很欣賞你試圖幫助我,儘管你的回答並不是100%正確的,但我已經解決了這個問題。 – 2014-11-06 12:40:16

+0

使它工作的真正技巧是在這部分代碼中:'catalog_url(:id => @ catalog.id)' – 2014-11-06 12:43:24

相關問題