问题标签 [alias-method-chain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
362 浏览

ruby-on-rails - 覆盖 Rails 核心 mixin 方法,仍然可以调用旧方法

好的标题令人困惑,我先告诉你我的问题:

polymorphic_url方法在 Rails 2.2.1 中进行了更改,以包含我需要的一些额外功能。但是,我想让应用程序在旧版本的 Rails 中仍然可以工作,所以如果旧版本的 Rails 正在运行,我想修补 2.2.1 的行为。

alias_method_chain救援对吗?我无法让它工作。

现在我首先尝试将它放在帮助程序中 -alias_method_chain失败,因为polymorphic_url那时没有定义。所以我将相同的代码移到控制器中,它没有出错,但它被忽略了。然后我尝试使用插件将其修补到 ApplicationController::Base -polymorphic_url仍未定义。

polymorphic_url在模块 ActionController::PolymorphicRoutes 中定义。我真的不知道它何时/何​​处混合到控制器/视图中。

我怎样才能以我想要的方式包装这个方法?

0 投票
1 回答
1317 浏览

ruby-on-rails - Rails - alias_method_chain 带有 'attribute=' 方法

我想通过一个模块在模型的方法上“添加”一些代码,当它被包含在内时。我想我应该使用 alias_method_chain,但我不知道如何使用它,因为我的“别名方法”是以“=”符号结尾的方法之一:

所以这就是我的模块现在的样子:

我在函数定义上遇到错误。如何解决这个问题?

0 投票
1 回答
3957 浏览

ruby-on-rails - alias_attribute 和使用原始属性名称创建和方法会导致循环

我试图在我的模型中的一个属性中动态创建一个方法链。现在我有这个功能:

所以我收到一个带有属性名称的字符串,将其别名为' _without_filter '(alias_method 或 alias_method_chain 在这里失败,因为创建类时属性不存在),然后我创建了一个具有属性名称的新方法,我在其中过滤它内容。

但不知何故,当我调用“#{attribute_name}_without_filter”时,它调用了我的新方法(我认为是因为 alias_attribute 某种方式),并且程序进入了堆栈循环。

我试图重命名该属性,因此我可以将其名称用于方法...

有人可以请教我。

0 投票
1 回答
1135 浏览

ruby-on-rails - ruby 中的别名方法链调用自身

我正在重写控制器渲染方法,但是,我想在 render_to_string 方法中使用旧方法。这些是我当前的代码:

发生的情况是,由于 render_to_string 使用了渲染(大概),我最终陷入了无限循环。我怎样才能让它回退到旧方法,只是为了那条线我的新渲染方法?

我从接受的答案中调整了代码,最终代码如下:

0 投票
3 回答
2184 浏览

ruby-on-rails - 如何修改 Rails 3 表单生成器

覆盖的最佳方法是form_for什么?

例如,在每个form_for(@post)

我想自动将<form>id 属性设置为@post.object_id,

并添加以下字段:hidden_field_tag :form_id, @post.object_id

我可以这样做alias_method_chain吗?

0 投票
2 回答
434 浏览

ruby-on-rails - HABTM 属性设置器上的 alias_method_chain 不起作用

所以我有一个帖子和主题的HABTM。一个帖子 HABTM 主题和一个主题 HABTM 帖子。我需要做的是在调用的同时调用一些方法post.topics=()

这是我在 Post.rb 中尝试过的:

然而,这现在打破了post.topics=()

我不会得到错误或任何东西,但topics()在更改后仍然是旧值topics=()

如果我在 中提出错误topics_with_extra_stuff=,则跟踪会说 中存在错误topics=,所以我知道它正在进入那里。我也知道extra_stuff()那叫。

这是一个输出示例:

它不应该还有 2 个主题,只有 1 个。

感谢您的任何见解。

0 投票
1 回答
87 浏览

ruby - 如何省略方法链的中间部分?

假设我有一个带有save方法的类,以及三个使用别名修改它的 mixin,例如

同样对于save_with_transactionand save_with_timestamps,按此顺序混合, soMyModel#save调用save_with_timestamps,调用save_with_transaction,调用save_with_callbacks,最后调用 original save

现在假设我想在没有交易的情况下保存。我可以打电话save_without_transaction,但这不会调用代码来设置时间戳。

如何使用时间戳和回调保存我的模型,但没有事务?

我可以重新排序 mixins,但我的问题是省略中间,而不是专门的交易。如何省略方法链的中间部分?

注意 - 为了简洁起见,我使用了 RoR 的 alias_method_chain,但我的问题一般适用于 ruby

0 投票
1 回答
811 浏览

ruby - 类 << self、alias_method 和猴子修补 Mechanize::Cookie

我遇到了 Mechanize::Cookie 行为不端的问题,我想尝试对其进行修补。我的代码:

当我添加这个时,cookie 没有被添加,我不知道为什么。

编辑: 要查看问题,请尝试使用和不使用猴子补丁的代码:

如果没有补丁,您将看到一个完整的 cookie 罐,而它是一个空的。

0 投票
1 回答
1803 浏览

ruby-on-rails - alias_method、alias_method_chain 和 self.included

我有点难以理解alias_method/ alias_method_chain。我有以下代码:

这正是我想要的 - 将“顶部有樱桃”附加到任何form_for呼叫的顶部。

但我的理解是,由于某些原因,这不是好的代码。首先,它不会链接任何其他覆盖,form_for(?)所以如果我要编写第二个form_for附加“顶部还有另一个樱桃”的方法,它就不会显示。其次,alias_method并且alias_method_chain是过时的解决方案,我应该使用self.included& 发送到模块。

但是我不能self.included调用这个form_for方法——它只是一直调用父方法。这是我正在尝试的:

我的上述解决方案有效,但我怀疑这是错误的做事方式。如果任何红宝石老手可以向我展示一种更优雅的方式 - 和/或为什么不调用第二个解决方案 - 我将不胜感激。

0 投票
3 回答
1004 浏览

ruby-on-rails - 方法未定义的别名方法链

我有一个包含在 Rails Observer 中的模块。

目的是:

  • 调用after_saveafter_update一个名为的方法check_integrity
  • check_integrityafter_save或/和after_update如果在观察者中定义时调用。

所以简而言之,它应该总是调用check_integrity.

我尝试了类似于以下代码的内容:

但它引发了一个错误:activesupport-3.0.17/lib/active_support/core_ext/module/aliasing.rb:31:in alias_method': undefined method after_update' for class TaskObserver' (NameError)

有人知道我怎么能做我想做的事吗?

谢谢!