问题标签 [service-object]

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 回答
3437 浏览

ruby-on-rails - 使用 rspec 测试服务对象作业

我有以下工作:

服务看起来像这样:

我正在尝试使用以下规范对其进行测试:

为什么变量值一直返回 nil 我收到以下错误“nil:NilClass 的未定义方法‘状态’”

但是,当我返回一个简单的布尔值时,

allow(Test::AragornService.new(key)).to receive(:call).and_return(true)

它将变量值设置为 true

这是 ServiceResult 类:

0 投票
1 回答
41 浏览

ruby-on-rails - 如何将数据从我的服务对象传递到我的控制器?

这是我的服务对象的代码app/services/grab_feed_from_jse.rb

当我pry在该文件的末尾执行 a 时,这是我得到的响应:

这样就有了我想要的结果。请注意我的@titles对象上可访问的所有方法。

但是,当我尝试以这样的方式执行此服务对象时portfolio_controller.rb

结果如下所示:

为什么对象不同?

如何在该服务对象的类中获取我@titles的对象GrabFeedFromJSE,以便@output我的控制器中的实例变量可以访问。

0 投票
1 回答
206 浏览

ruby-on-rails - Rails 5.2 非当前用户的服务对象

我正在尝试通过 rails 5.2 中的服务对象方法将操作转发给另一个控制器。

创建操作应该传递创建操作的用户 ID,但我未能正确传递该参数。

业务逻辑如下:用户租用资产,潜在租用者提出请求,当资产所有者同意访问时,在另一个控制器中创建租用用户作为客户端组织访问。

我正在尝试解决客户端控制器中的创建操作,如下所示:

在租金控制器中:

然后在 app/service/newclient_service.rb

这段代码完成了这项工作。数据库已满,验证和强大的参数似乎有效,在我看来它足够健壮/安全。

问题:服务对象(我的方式?)路由是转发该操作的最首选方式吗?

谢谢你的帮助,

0 投票
1 回答
682 浏览

ruby-on-rails - 如何在 Rails 服务对象中显示 Flash 消息

我想将服务对象添加到我的控制器中。是否有机会在此服务对象中包含闪存消息?

user_stocks_controller

服务对象user_stocks_creator

使用此代码,我有一个错误:

未定义的局部变量或方法“flash”

0 投票
1 回答
50 浏览

ruby-on-rails - Rails 销毁操作不会删除

我想将服务对象添加到我的控制器中。然而,销毁操作似乎无法正常工作 - 基本上它不会删除任何内容,只是重定向到没有 Flash 消息的页面。

user_stock_destroyer.rb

user_stocks_controller.rb

0 投票
1 回答
234 浏览

ruby-on-rails - 如何将自我从模型传递到服务对象

我想将 deftrack_item_added从模型移动到服务对象。模型:

和我的服务对象

现在在对象服务中是在 deftrack_item_added但是现在当我启动这个函数时我得到一个错误

可能是我在构造函数中传递 self 的问题(新)

0 投票
1 回答
225 浏览

ruby-on-rails - Rails 在 Service 对象中使用私有和受保护的方法

我正在尝试将一些业务逻辑从我的一个控制器中移出,StoreController并移到一个新的Store::CreateService服务对象中。最近学习了服务,这似乎不是实现它们的既定模式。我在尝试调用受保护的方法时遇到错误。我显然可以将逻辑从那些受保护的方法中直接移入execute,但我的理解是这对 Rails 应该没问题。

这是服务对象

0 投票
1 回答
22 浏览

ruby-on-rails - 如何将 3 个 ServiceObjects 最小化为每 1 个操作 1 个

我有一个带有一些代码和 3 个服务对象调用的操作的 Worker。2 服务对象,用于在对象保存的不同状态(更新开始、更新完成)期间将数据保存到基础。1 用于计算进度百分比。

我知道,每 1 个操作应该是 1 个服务对象。我应该如何避免使用开销服务对象?或者我应该如何重构我的代码,例如,将它分成几部分?

对不起,如果我在问题风格上有错误。我试图清楚地解释情况。

csv_worker.rb

import_started_update_job_service.rb

import_completed_update_job_service.rb

import_percentage_update_job_service.rb

0 投票
1 回答
240 浏览

ruby-on-rails - Rails:未初始化的常量 - 无法从控制器访问另一个类

search_handlers_controller.rb

/services 中的 MatchService.rb:

从 SearchHandlersController#match 调用 MatchService 时出错:

0 投票
0 回答
91 浏览

ruby-on-rails - 将 ActionCable 与服务对象一起使用并响应消息

为这个问题命名非常困难,但本质上,我的 Rails 应用程序中有一个服务对象,它为 Resume Processing 创建了一个流程。我正在尝试使用 ActionCable 将我的前端与后端连接起来。我这样做的当前方法是在我的控制器中实例化我的服务对象:

然后我的服务开始向我的前端广播以打开相应的模式:

服务

导轨通道

然后由我的频道负责。稍后,我的频道会发回一个“进度更新”,让我的服务知道模式打开成功: JS Channel

现在,我的问题是,一旦该消息被发送回我的(ruby)通道,我想不出一种方法让它找到我现有的服务对象实例并使用它。如您所见,我尝试在第一次广播时使用服务对象实例在频道上设置实例 var,但这(以及其他一百万件事)不起作用。一旦我得到带有'parse'的screen_name的'screen_transitioned',我需要调用#begin_from_parse_modal。理想情况下,我想尽可能地分离广播逻辑和解析逻辑。

我知道频道的实例可以被认为是实际的订阅,但我只是不明白一个系统的最佳实践是什么,我可以发送一个“做这个”消息,然后在我得到后做某事“完成”消息。

如果我在解释和/或代码方面遗漏了什么,请告诉我。也请随时让我知道下次我提出问题时是否应该做一些不同的事情!这是我第一次在 stackoverflow 上提问,但这是我第十亿次寻找答案 :)

编辑:我仍然对这种看似常见的情况感到目瞪口呆。仅仅让通道充当服务对象可能是最佳实践吗?如果是这样,我们将如何在其上存储状态?我能想到的以任何形式工作的唯一可能方法是在每个 WS 消息中发送完整状态。或者至少是每个处于状态的记录的 id,然后在每条消息上查找每条记录。这似乎过于复杂和昂贵。我搜索了其他问题,甚至是 ActionCable 教程,以找到任何使用服务对象来接收消息的人,但一无所获。求救!