mailer.rb
class Mailer < ActionMailer::Base default from: "foo@bar.com" def catalog_download_request(email,catalog) @catalog = catalog mail({ to: email }) endend
的routes.rb
Rails.application.routes.draw do scope "(:locale)" do resources :catalogs,:path => I18n.t("routes.catalogs"),only: [:index,:show] endend
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 = :smtpconfig.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 endend
这就是我在我看来尝试的内容:
<%= 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) %>解决方法 ActionVIEw :: Template :: Error:No route匹配{:action =>“index”}的原因是:
link_to需要两个参数(text和url)(api).你只通过了一个.将文本作为第一个参数传递后,它将正常工作.
如果你真的想要,根据文档,你传递nil作为第一个参数,然后url作为第二个参数.
总结以上是内存溢出为你收集整理的ruby-on-rails – ActionMailer link_to显示 *** 作失败并显示“缺少必需的键:[:id]”全部内容,希望文章能够帮你解决ruby-on-rails – ActionMailer link_to显示 *** 作失败并显示“缺少必需的键:[:id]”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)