我正在嘗試將一個鏈接顯示到由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) %>
對我來說同樣的錯誤。 即使嘗試最簡單的示例'<%= recording_url(@recording)%>'或'<%= recording_path(@recording)%>' 這是非常基本的Rails應用程序,沒有任何特別的。 – Schovi 2014-10-08 13:17:38
我認爲你需要做和我一樣的工作:'recording_url(:id => @ recording.id)' – 2014-11-06 12:42:34