Tag: 回调

Rails模型“before_filter”?

我知道before_filter只适用于Rails中的控制器,但是对于模型我想要这样的东西:每次调用模型中的方法时,我都想运行一个方法来确定被调用的方法是否应该运行。 从概念上讲,这样的事情: class Website < ActiveRecord::Base before_filter :confirm_company def confirm_company if self.parent.thing == false? return false end end def method1 #do stuff end end 因此,当我调用@ website.method1时,它将首先调用confirm_company,如果我返回false,则不会运行method1。 Rails有这样的function吗? 我希望我只是错过了一些明显的东西……

在after_commit,:on =>:create中更新属性时防止无限循环

当我需要在after_commit, :on => :create期间更新属性时,我创建了一个无限回调循环after_commit, :on => :create 。 但是,只有在我需要在此回调期间更新对象的属性时才会发生这种情况。 有办法防止这种情况吗? 我可以以某种方式强制模型重新加载自己,因此它知道它正在执行更新而不是创建吗? class Doc :create … def generate # some logic here that requires this model to be saved in the db self.update_attributes(:filename => filename) # Infinite loop begins here. end end

如何通过关联在has_many中使用回调?

我有一个通过has_many通过项目模型关联的任务模型,需要在通过关联删除/插入之前操作数据。 由于“ 自动删除连接模型是直接的,因此不会触发销毁回调。 ”我无法使用回调。 在任务中,我需要所有project_ids在保存任务后计算项目的值。 如何通过关联禁用删除或更改删除以销毁has_many? 这个问题的最佳做法是什么? class Task has_many :project_tasks has_many :projects, :through => :project_tasks class ProjectTask belongs_to :project belongs_to :task class Project has_many :project_tasks has_many :tasks, :through => :project_tasks

Omniauth:回调未触发,返回失败并显示“无效凭据”

我的Rails应用程序中使用Omniauth gem实现的facebook身份validation最近已停止工作。 问题是回调应该使用的控制器操作不会被触发,并且进程会立即跳过“无效凭据”消息而失败。 日志: Started GET “/auth/facebook” for ::ffff:127.0.0.1 at 2017-03-29 11:12:29 +0200 Started GET “/auth/facebook/callback?code=<>&state=<” for ::ffff:127.0.0.1 at 2017-03-29 11:12:30 +0200 Started GET “/auth/failure?message=invalid_credentials&origin=<>&strategy=facebook” for ::ffff:127.0.0.1 at 2017-03-29 11:12:31 +0200 Started GET “/login” for ::ffff:127.0.0.1 at 2017-03-29 11:12:31 +0200 Processing by UserSessionsController#new as HTML 路线: match “/auth/failure” => redirect(“/login”), :via => [:get, :post] match […]

从Ruby类中调用方法? (或者这是铁路魔术)

我是Ruby的新手,并且正在学习一些教程/截屏video。 我已经到达了他们讨论before_filter回调的部分,并且它使用了一些对我来说有点奇怪的语法。 我不知道它是否是ruby的特征,如果它是一些铁轨魔法,并希望有人在这里可以让我直接或指向我正确的方向w / r / t手册 这是我正在观看的截屏video的代码片段 class MachinesController [:report] #… def index #etc… end def login_required #etc… end end 在rails的上下文中,我理解before_filter是一个回调函数,它会在调用report操作时触发login_required方法。 但是,我不清楚在ruby的背景下它是什么。 在其他语言中,类通常包含在大括号内定义的方法,属性,类变量和常量。 但是,这看起来像是在类中的函数调用,并且一些实验表明您可以将代码放在类定义中并在程序运行时调用它。 它是否正确? 如果是这样,是否有特殊的上下文规则用于将内联放入类中的代码? (即,rails中的before_filter函数是否知道它是从哪个类调用的)如果不是,那么rails在这里做了什么魔术?

为什么回调在Ruby on Rails中使用符号

我很难理解何时何时不在Rails中使用符号。 我知道符号与没有很多方法的字符串差别不大。 我也理解符号是好的键,因为同名的符号占用内存中的一个地址。 我很难理解为什么Rails决定在某些情况下使用符号。 如果我有回调 before_action :ask_stack_overflow_question def ask_stack_overflow_question puts “why did I just use a symbol?” end 我不太明白为什么把方法当作符号? 为什么我需要保持方法不变? 我在文档中找不到任何答案。 谢谢

Rails – before_save不工作?

我正在关注Michael Hartl的RoR教程,它涵盖了密码加密的基础知识。 这是目前的用户模型: class User true, :length => {:maximum => 50} validates :email, :presence => true, :format => {:with => email_regex}, :uniqueness => {:case_sensitive => false} validates :password, :presence => true, :length => {:maximum => 20, :minimum => 6}, :confirmation => true before_save :encrypt_password private def encrypt_password @encrypted_password = encrypt(password) end def encrypt(string) string end […]

rails 3:我需要在before_save回调中返回true才能使object.save工作吗?

Class User before_save :set_searchable def set_searchable self.searchable = true if self.status == :active end end >> u = User.last >> u.save false u.save总是返回false。 如果我删除before_save它也有效,如果我在before_save中返回true它可以工作 所以我需要在before_save中给出return语句吗? 如果before_save返回false,ActiveRecord会保存一个对象吗? 我在哪里可以看到有关回调及其工作流程的完整文档。 提前致谢

Rails模型中around_create回调的目的是什么?

什么时候是around_create回调代码执行,在什么情况下我们应该使用它?

添加一个回调函数到Ruby数组,以便在添加元素时执行某些操作

我想在Ruby数组中添加类似回调函数的东西,以便在将元素添加到该数组时调用此函数。 我能想到的一件事是覆盖所有方法(如<<,=,insert,…)并从那里调用该回调。 有更简单的解决方案吗?