问题标签 [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 回答
7647 浏览

ruby-on-rails - 如何创建带有参数的 Rails 4 关注点

我有一个名为 User 的 ActiveRecord 类。我正在尝试创建一个名为的关注点Restrictable,它接受一些这样的参数:

然后我想提供一个实例方法restricted_data,该方法可以对这些参数执行一些操作并返回一些数据。例子:

我该怎么做呢?

0 投票
1 回答
678 浏览

ruby-on-rails - 从 Rails 4 引擎扩展 ActionController::Base

我正在尝试ActionController::Base从 rails 4 引擎扩展,以便安装它的任何应用程序在每个操作之前运行特定方法。现在我知道可能有几种不同的方法可以做到这一点,比如关注点,class_eval或者开放分类,但我对这一切都很陌生,我能找到的链接主要是关于如何从主应用程序扩展引擎控制器,而不是就像我正在尝试的那样。

这是我尝试过的,我在引擎的控制器文件夹中创建了一个新文件夹,如下所示:

并在base_controller.rb我添加了以下内容:

这不起作用。我认为这是因为它没有被加载(我仍在尝试了解如何以及在哪里将这样的自定义代码放置在 rails 引擎中),所以我尝试将该代码复制到my_engine/lib/my_engine/engine.rb文件中,但随后出现以下错误启动服务器时:

如何做到这一点,我应该在哪里正确放置文件?

0 投票
0 回答
126 浏览

ruby-on-rails - 将 Rails ActiveSupport::Concern 包装到其他关注点中

我创建了一个 ActiveSupport::Concern,并在 ClassMethods 方法中从 Carrierwave 调用 mount_uploader 方法

/lib/my_concern.rb

/app/models/my_model.rb

一切正常,直到我在调用该方法的类中更改某些内容(我的意思是任何内容),然后我给了我:

我相信与它如何加载这些方法有关。

Ps:我在我的开发环境中使用 Thin,每次都给我错误,然后我重新启动服务器,它就会恢复工作。

0 投票
1 回答
1602 浏览

ruby-on-rails - 如何使用 ActiveSupport::Concern 继承类方法

我的 Ruby on Rails 应用程序中有一个小的类层次结构。我试图添加一个关注点,即支持描述具有一些我希望由子类继承的信息的类。这个问题可以用这个小样本来说明:

我希望这个示例代码返回

但不幸的是 ChildItem 和 AnotherItem 没有添加在父类上设置的类“属性”,而是返回

如何使类继承按我想要的方式工作?

0 投票
1 回答
31 浏览

ruby-on-rails-4 - 控制器的关注模块与模型的关注模块共享?

如果我在控制器/关注文件夹中创建 FooConcern 模块,在模型/关注中创建 FooConcern 模块,则存在覆盖问题,或者我们可以像 disinct 模块一样使用它们?

0 投票
1 回答
2787 浏览

ruby-on-rails - 覆盖 ActiveSupport::Concern 模块中由同一模块中的类方法定义的方法

我有一个 ActiveSupport::Concern 模块,大致如下所示:

这只会被包含在 ActiveRecord 类中,因此使用enum. 基本上,我用我自己的一些额外的自定义逻辑覆盖了declined!accepted!方法。ActiveRecord::Enum.enum

问题是,这不起作用,因为当我调用@model.declined!它时,它只是调用原始实现declined!并忽略我的自定义方法。

看起来我的自定义方法在运行包含的块之前被包含在调用类中 - 这意味着我的自定义方法被由定义的方法覆盖enum,而不是相反。

在这种特殊情况下有一些简单的解决方法(例如,我可以将调用enum移回包含类并确保它在行之上include MyModel::Acceptance,但我想知道是否有一种方法可以解决这个问题,同时将它全部保存在同一个模块中.

有什么方法可以调用included定义实例方法的类方法,然后从同一个Concern模块中覆盖该实例方法?

0 投票
1 回答
2990 浏览

ruby-on-rails - rails - 与验证有关的问题

我有关于验证的问题有类
/app/models/group.rb

/app/models/concerns/localized/title.rb

当我尝试在模型中使用验证时,它可以工作,但不用担心。请帮助我,我做错了什么?

PS AbstractModel < ActiveRecord::Base, rails 4.2, ruby​​ 2.2.0p0

0 投票
1 回答
546 浏览

ruby-on-rails - Rails 4.2 关注测试环境中忽略的内容

我陷入了一个非常奇怪的问题。我最近从 rails 4.1 更新到 4.2。在 4.1 中一切正常。但是现在,在 4.2 中,模型关注内容似乎被忽略了,即使找到了关注点。

说得简单。我有一个Client模型,它属于在关注点Address中定义的Addressable关系:

应用程序/模型/client.rb

应用程序/模型/地址.rb

应用程序/模型/关注/addressable.rb

环境没有问题development。我可以Client.new.address毫无问题地做。但是在test环境中,同一行给了我一个unknow method address错误。如果我搬到belongs_to :address那里Client,它会再次起作用。该模块被包含在内,因为这没有错误,如果我将名称更改为Adressabledewdewdedthen,当然会出现错误。

验证方法等也会发生同样的情况。

我一直在调试这个,但我没有找到根。我已经复制了我development.rb的 astest.rb并重新启动了服务器,但仍然如此。我无法在全新的 Rails 4.2 应用程序中重现这一点,因此它与我的应用程序或更新过程有关,但不知道在哪里。

有人有线索吗?

谢谢

更新

Client.new.address这是在测试环境中的控制台中执行的堆栈跟踪(在开发中它有效):

更新

两种环境中的结果Client.ancestors是(当然,没有实例身份的唯一区别):

并且做Client.reflections.keys使出address现在开发中而不是在测试中。

0 投票
1 回答
8784 浏览

ruby-on-rails - Rails 4 关注点:将类实例变量赋予模型

对于 Rails 问题,我可以通过包含模块来提供模型类方法和实例方法。我发现没有博客条目或线程提到我如何在我的模型中包含变量。

具体来说,我想给我的包含模型一个类实例变量@question,但我不知道将声明放在模块中的哪个位置以便应用它。如果模型本身声明了该变量,我还希望覆盖类实例变量。

ActiveSupport::Concern模块真的关心变量吗?

0 投票
1 回答
1314 浏览

ruby-on-rails - 使用关注点覆盖 Rails 引擎模型,获取未初始化的常量关注点::模型

我正在遵循 Rails 指南来覆盖引擎模型,我正在使用一个ActiveSupport::Concern来覆盖它。

我在引擎中创建了一个模块seven_gallery/lib/concerns/models/gallery.rb,其中包含以下代码:

并将seven_gallery/app/models/seven_gallery/gallery.rb代码更改为:

现在在我的主机应用程序中,我将引擎包含在Gemfile其中

我有一个User模型,其中包含:

但是每当我运行应用程序时,我都会在User模型内的唯一一行上得到这个错误: