问题标签 [activesupport-concern]

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 投票
2 回答
2249 浏览

ruby-on-rails - Rails 关注如何从 InstanceMethod 调用 ClassMethods

我需要从实例方法调用weight_to_kg 方法。

我想为我的许多模型创建重量到公斤的转换器,这些模型的重量列以磅为单位。

我该怎么做?

0 投票
2 回答
952 浏览

ruby-on-rails - 自动加载常量关注点时检测到循环依赖::

注意:在您考虑将此问题标记为其他类似问题的重复之前,请注意这个问题是关于 Rails 中的问题的问题,而我搜索的其他问题涉及控制器。毫无疑问,我发现了,这与关注有关。

我有一个名为comments_deletion.rb的文件app/models/concerns,它包含以下代码:

我试图通过编写以下代码在我的模型中混合文件:

只是这样做,然后在调用 时rails console,它给了我以下错误:

我正在使用 Rails 4.0.2,这件事让我发疯了,我无法弄清楚我的代码有什么问题。

0 投票
2 回答
2879 浏览

ruby-on-rails - 将参数传递给关注点,使用关联

我有一个关注来设置一些常用的关联(除其他外),但我需要根据使用关注的类进行一些小的调整。我的基本顾虑是这样的:

如您所见,我希望能够更改组织关联中的类名。

我在想我可以包含一些类方法来提供这种支持,但我无法弄清楚我们如何继续获取这个值。这是我如何看待自己使用它的方式:

这是我当前版本的代码:

我认为这至少有两个问题:

1).organization_class在建立关联时似乎没有定义该方法,因为NoMethodError: undefined method当我加载 Dentist 模型时,我得到了 Class:Class` 的 organization_class'。

2)我猜在我什至将类传递给关注点(organizable organization_class: DentistClinic行)之前,关注点内部的关联将被评估,所以它无论如何都不包含值。

我真的不确定如何解决这个问题。有没有办法将此参数传递给关注点并使用此值设置关联?


这不是如何创建带参数的 Rails 4 关注点的副本

所做的几乎与那篇文章中概述的完全一样。我的用例有所不同,因为我试图使用参数来配置在 Concern 中定义的关联。

0 投票
3 回答
2919 浏览

ruby-on-rails - 如何在rails模型关注中覆盖class_method

如何覆盖模型关注点中定义的类方法?

这有点棘手,因为您并没有真正覆盖类方法,对吗?class_methods因为它使用了在块中定义类方法的关注api 。

所以说我有一个看起来像这样的问题:

在模型中..我将如何覆盖该方法,以便在使用继承时可以像使用 super 一样调用它?所以在我的模型中,我想去:

?

0 投票
2 回答
1118 浏览

ruby-on-rails - ActiveSupport::Concern Callback - NilClass 的未定义方法

我正在尝试设置一个实用程序回调,该回调可用于我的 Rails 应用程序中的多个模型,使用ActiveSupport::Concern. 我有以下Postable模块:

/app/models/concerns/postable.rb

这是我的Post模型:

/app/models/post.rb

当我创建一个新实例Post并调用post.save时,我收到以下错误:

我在这里做错了什么?

0 投票
1 回答
95 浏览

ruby-on-rails - 我可以从 ActiveRecord::Concern 调用类方法而不将其混合到另一个类中吗?

我正在创建一个ActiveSupport::Concern,它使用该方法定义了几个类方法class_methods。使用常规模块,可以直接使用调用类方法NameOfModule.target_method(例如,在 stdlib 类 Math 中调用acos是很常见的Math.acos(x)),但我不知道如何执行类似的调用 my Concern. 这可能吗,如果可以,怎么做?

0 投票
1 回答
2968 浏览

ruby - Ruby 替代在 ActiveSupport::Concern 中使用类变量

我有一个应用程序需要对数据库中的某些字段使用加密。这目前是使用一个关注点来实现的,该关注点处理包含类上的加密和管理字段的详细信息。系统能够以编程方式确定哪些类包含此问题非常重要,但更具体地说,以编程方式需要有一种确定哪些字段被加密的好方法。

今天,这是使用这样的类变量实现的,工作的:

包含在一个类中,如下所示:

类变量@@encrypted_attributes将正确捕获键值对的散列,其中包含类名作为键,加密属性数组作为值。我考虑过使用加密模型的注册系统来使用和“注册”它们自己及其属性,但是与此相关的开销要多得多,在我的时间线上,我想从更简单的东西开始,如果它不太不安全的话.

这实际上在我当前的应用程序中运行良好,但我没有很多关于关注点或类变量的经验,所以我担心我是否对它的行为方式做出了严重的误判。这里的陷阱在哪里?自从我开始使用 ruby​​(不久前)开始使用 ruby​​ 以来,我一直在编程,通常要避免使用类变量。

我已经被这个咬过一次,因为最初我认为类变量@@encrypted_attributes将是包含类的类变量;这显然不是这样。每个包含它的新模型都会覆盖它,所以我得出的结论是这个类变量显然是关注本身。至少,这是我似乎正在目睹的行为。这最终证明是一种更理想的行为,因为现在我可以获得加密模型的完整列表。这有一个明显的限制,它只能返回已加载模型的加密模型和属性列表。

所以,我的问题:

这是类变量的正确用例,还是有另一种(更好的?)方法来捕获相同的信息?如果这是一个可接受的类变量用例,我应该添加哪些陷阱和/或保护措施以确保代码按预期工作?

也许我只是想太聪明,我应该硬编码我的列表?谢谢您的帮助!

0 投票
1 回答
773 浏览

ruby-on-rails - 模型关注中的 Rails 5 枚举生成 NameError: uninitialized constant

Rails 5 在这里。

我试图在我的用户模型(设计模型)中加载一个关注点,但没有运气。该include Levelable作品在其他型号上没有任何问题。我是否必须为这个特殊模型配置一个特殊的配置/帮助程序/初始化程序才能使其工作?

模型关注 Levelable 被模型 User 和 Client 使用

和模型(为便于阅读而缩短)

这个设置结果是:NameError: uninitialized constant User::Levelable 同样的错误发生在客户端模型上,所以我猜有些东西不能处理我的关注负载。我已经尝试在config/application.rb没有任何更改的情况下自动加载内部路径。

我不知道如何使关注的负载起作用,任何帮助都会很棒。谢谢 !

0 投票
1 回答
415 浏览

ruby-on-rails - Rails 4 - 使用关注点进行路由

我试图弄清楚如何在我的路线文件中使用关注点。

我有名为 User、Project 和 Eoi 的模型。

这些协会是:

用户

项目

爱伊

我正在尝试创建一个系统来显示已在项目中提交的 eois,以便它们仅对创建该项目的用户可见。

另外,我想向每个用户展示该用户制作的所有 eois(无论他们是在哪个项目上制作的)。

我想我想要第一个场景的嵌套路由,然后我还想要第二个场景没有嵌套的 eoi 路由。

在我的 routes.rb

我有:

我也想拥有:

我怎样才能使这项工作?我无法掌握此http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Concerns.html中的示例

我不明白示例中的值得称赞的是模型还是我需要编写的东西才能在 routes.rb 文件中的两个位置拥有路由。

我的下一个尝试是尝试复制上面链接中示例的要点,我有

我不确定我是否需要在某个地方进行定义才能使其正常工作。

0 投票
1 回答
634 浏览

ruby-on-rails - 未定义的方法belongs_to ussign Rails 关注,为什么?

我正在尝试从 gem 扩展 rails 模型。

使用关注我已经能够扩展类方法,但我不能扩展关联included do返回undefined method belongs_to。我认为 Rails 无法正确加载类......

模型引擎中,我正在尝试从我的gem访问它。

这是代码:

从命令行:

如果我取消注释,included do我会收到此undefined method 'belongs_to' for Myengine::Mymodel:Class (NoMethodError)错误。