Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails全局函数:调用传递对象函数_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails全局函数:调用传递对象函数

Ruby on rails Rails全局函数:调用传递对象函数,ruby-on-rails,Ruby On Rails,我想创建一个全局函数,我将把它放在我的应用程序控制器中 为了简化这个问题,下面是一个我将要做的示例: 在我的/application\u controller.rb中 def self.global_function(device) p device end 在我工作的控制器中: def some_function global_function(Device.find(some_id)) end 这是可行的,但我希望它能够工作,例如,像.last方法那样。最终结果将允许我这样调

我想创建一个全局函数,我将把它放在我的应用程序控制器中

为了简化这个问题,下面是一个我将要做的示例:

在我的
/application\u controller.rb中

def self.global_function(device)
    p device
end
在我工作的控制器中:

def some_function
  global_function(Device.find(some_id))
end
这是可行的,但我希望它能够工作,例如,像
.last
方法那样。最终结果将允许我这样调用:

def some_function
    Device.find(some_id).global_function
end
仍然传递设备对象,但不需要参数


除了美学之外,我无法给出我为什么喜欢其中一个而不是另一个的原因。如果使用一种方法比另一种方法有任何缺点,我也想知道。谢谢

您对什么是函数,什么是方法感到困惑

这与创建“全局功能”无关。您只需要在
设备上定义一个普通的旧方法

class Device < ActiveRecord::Base
  def some_method
    # do something with `self`
  end
end

为了记录在案,我在发布之前研究过这个问题。不知道为什么人们觉得不给理由就投否决票是可以的。如果它是一个副本,至少提供一个链接到原始和投票关闭。你可能正在寻找帮助。它们更干净,不需要太多思考,但第一种形式可能是您必须使用的,因为第二种形式意味着您在活动记录对象中使用了某种方法,这感觉不太正确。否决票表明某个问题“不清楚或没有用”,而您的问题实际上不是。你误用了“全局”和“函数”这两个词,你所描述的与这两个词都无关,所以这个问题对其他任何人都没有用处。从谷歌来到这里的人,因为他们正在搜索“Rails中的全局函数”,在你的问题或它生成的答案中,他们会发现绝对没有任何相关内容。@非常感谢你的回复。我在评论中提到,我确实混淆了2。话虽如此,我觉得我已经很清楚地表达了我想要实现的目标。与其投反对票,也许你可以建议进行编辑,使帖子更“清晰和有用”。谢谢你的回复。首先,我想我可能混淆了2。第二,我知道怎么做。我需要它的全局性,这样我就可以调用任何控制器和任何模型。就像
.last
方法一样。然后您需要在
ActiveRecord::Base
(在旧Rails中)或
ApplicationRecord
(在Rails 5+中)上定义一个方法,或者在关注点中提供您的方法,并将该关注点添加到您的模型中。这仍然是对这个词的误用。@meat谢谢你提供的信息。我会开始调查的。我现在觉得这可能是适当的关闭,因为没有用。
Device.find(some_id).some_method