这是一个 MVC 问题。 这是情况:
所以,我在想应该怎么设计才不会出现代码重复。也就是说,API 和 Web 界面应该共享大部分代码。
为此,我可以在模型“group”中创建方法“invite”。因此,API 和 Web 界面可以调用: 群组->邀请($emailList); 此方法可以发送电子邮件。但问题是,我必须访问邮件模板,为邮件创建 View ,然后发送邮件。这实际上应该在“ View ”部分或至少在“ Controller ”部分。
在这种情况下最优雅的设计是什么?
注意:我真的很想把这个写在模型里。我唯一的疑问是:以前我认为发送邮件也作为“演示文稿”。因为它可以被视为生成输出的不同形式。
编辑后添加
我理解View不一定要输出到浏览器。这就是我的疑问所在。现在的问题是,假设我的应用程序中有一个“任务列表”。我们可以将任务分配给一些人。现在可以在两种情况下调用“assignTo”方法:1) 创建任务时 2) 将任务重新分配给其他人。
在这两种情况下,新的受让人都应该收到电子邮件通知。因此,如果“assignTo”方法没有发送邮件,我们必须在两个地方复制邮件部分:“任务创建 Controller ”和“任务重新分配 Controller ”。
我想避免这种重复。
最佳答案
View 不一定是用户可以看到的浏览器的输出。它也可以是通过电子邮件发送的模板。 Controller 接收关于做什么的输入,从 Model 请求必要的信息,并使用 View 输出该信息。在这种情况下,View 将是电子邮件的模板,而 Controller 的任务是通过电子邮件发送该输出。
查看:点击“邀请”(或API:发送邀请命令);
Controller :用户点击“邀请”,从模型中获取数据;
模型: Controller 请求数据(特定人员的电子邮件或诸如此类),返回;
Controller :从模型接收数据,为 View (模板)设置数据并通过电子邮件发送“ View ”。
之后,向 API 返回一些内容,或者告诉 Controller 为 Web 界面输出一个 View,告诉用户邀请已被处理。
关于php - 在 MVC 框架中从哪里发送邮件,这样就没有重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2801659/
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow