小编Eri*_*man的帖子

Rails Mailer最佳实践 - 控制器或after_create回调?

在常见的Ruby on Rails 3/4应用程序中,有两种选项可在创建模型后传递邮件:

1)直接从控制器的创建操作发送邮件

#listings_controller.rb

def create
    @listing.create(params[:listing])
    if @listing.save
        ListingMailer.new_listing_notice(@listing).deliver
        format.html {redirect_to @listing}
        ...
    end
end
Run Code Online (Sandbox Code Playgroud)

2)从模型回调发送邮件

#listing.rb


class Listing
    after_create :notify
    ...
    def notify
        ListingMailer.new_listing_notice(self).deliver
    end
end
Run Code Online (Sandbox Code Playgroud)

关于哪种方式更好,目前有共识吗?从控制器发送可以提供更多控制,但如果始终发送邮件,是否有任何理由不使用回调?这主要是风格问题,还是有其他重要问题?

email ruby-on-rails

13
推荐指数
1
解决办法
2033
查看次数

可以在从旧样式转换为新样式后取消类实例吗?

在python中,是否可以将被转换为旧式python类的对象转换为新样式的对象?(即具有不同"类签名"的对象).*

例如,假设某些实例保存为:

class foo: # old style
Run Code Online (Sandbox Code Playgroud)

然后在将类更改为从对象继承之后,再腌制几个对象:

class foo(object): # new style
Run Code Online (Sandbox Code Playgroud)

pickle.dump"with one"的对象可以pickle.load由相同的样式类进行编辑,但两者都不会同时加载.我认为pickle使用的策略基于继承而变化(从对象继承的类具有自动定义的__reduce__方法,但没有继承的方法没有).当试图从没有继承的代码(旧式定义)中加载带有继承的旧式pickle时,我得到了与此SO问题中看到的相同的参数错误; 即使第二个参数是多余的,它仍然会更改"类签名"和预期参数,并阻止加载.为了解决这个问题,我很乐意写一个破坏者,虽然我担心它可能涉及两个单独的分类分析者和文档 ...如果我知道如何正确地去除每个人,我会做得很好那.

关于我的情况的一点背景......我正在使用TrialHandler类来保存和重新加载按钮按压和行为心理学实验的反应时间.我们重构了TrialHandler类以从更抽象的baseTrialHandler继承,但是这样做暂时将类签名更改为从object继承.但是,我们无法解开较旧的trial_handler文件,因此将其更改回来.我想查看与两个版本的试用处理程序一起运行的同一实验的数据,因此想要在同一个脚本中取消同步两种类型的已保存日志文件.

或者,如果我不能编写一个可以解开两个对象的自定义unpickler,是否有另一种方法来序列化它们?我试着直接倾向于yaml,但看起来我必须将这个类注册为可以被yaml'ized的东西,无论如何.

PsychoPy邮件列表中包含特定错误问题的完整描述.任何博客文章解释细节中间酸洗,甚至python继承,将是最受欢迎的; 我找到的最接近的是一个很好的解释,为什么酸洗是不安全的描述酸洗作为"简单的基于堆栈的虚拟机",这是很好的,但不能让我足够弄清楚即使是自我修复的基础知识.

python inheritance pickle

6
推荐指数
1
解决办法
1183
查看次数

标签 统计

email ×1

inheritance ×1

pickle ×1

python ×1

ruby-on-rails ×1