【发布时间】:2014-11-20 18:19:51
【问题描述】:
我正在尝试将显示动作的链接放入 rails action mailer 呈现的视图中。
mailer.rb
class Mailer < ActionMailer::Base
default from: "foo@bar.com"
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: 没有路由匹配 {:action=>"show", :controller=>"catalogs", :format=>nil, :id=>nil, :locale=>#}所需键:[:id]
再试一次:
<%= link_to catalog_url(@catalog) %>
错误:
ActionView::Template::Error: 没有路由匹配 {: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 应用程序,没有任何特别之处。 -
我认为你需要为我做同样的事情:
recording_url(:id => @recording.id)
标签: ruby-on-rails ruby-on-rails-4 actionmailer