【问题标题】:Customize Devise mail template path for the same model为同一模型自定义设计邮件模板路径
【发布时间】:2013-12-27 04:39:44
【问题描述】:

我正在开发一个包含铁路引擎的铁路应用程序。我使用设计 gem 进行帐户身份验证。一方面,我想用一个 main_app 模板发送确认指令邮件。另一方面,我想发送带有另一个用于 Rails 引擎的模板的确认指令邮件。两个视图都使用相同的模型“帐户”。有什么想法请帮忙!

【问题讨论】:

  • rails enginemain_app 是什么?
  • 引擎可以被认为是为它们的宿主应用程序(main_app)提供功能的微型应用程序。宿主应用程序可以有许多 Rails 引擎。
  • 您的用例不清楚,为什么有人会在 Rails 引擎功能中使用主应用程序中的模型?
  • 因为逻辑是一样的。只是观点不同。例如,桌面视图和移动视图。两者具有相同的逻辑但不同的布局。移动视图是 Rails 引擎,桌面视图是主要应用。

标签: ruby-on-rails ruby-on-rails-3 email devise devise-confirmable


【解决方案1】:

根据需要添加一个名为“foo.html.erb”的新布局

在主控制器中添加以下内容:

layout "foo", :only => [ :index, :show ]

您可以使用以下命令指定特定操作的布局:

def new 
 render(:layout => "layouts/application")
end

为控制器中的不同操作定义另一个布局。可能是添加另一个

layout "standard", :only => [ :new, :edit ] 

可能有用...

也试试这个方法:-

class MyController < ApplicationController

 def foo
   @model = Bar.first
   respond_to do |format|
    format.html {render :layout => 'application'}
    format.html.phone {render :layout => 'phone'}
    format.html.tablet {render :layout => 'tablet'}
   end
 end

end

最近在 Rails 4.1 中包含:-

class ApplicationController < ActionController::Base
 before_action :detect_device_variant

 private

  def detect_device_variant
    case request.user_agent
    when /iPad/i
      request.variant = :tablet
    when /iPhone/i
      request.variant = :phone
    end
  end
end

class PostController < ApplicationController
 def show
  @post = Post.find(params[:id])

  respond_to do |format|
    format.json
    format.html               # /app/views/posts/show.html.erb
    format.html.phone         # /app/views/posts/show.html+phone.erb
    format.html.tablet do
      @show_edit_link = false
    end
  end
 end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多