问题标签 [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.
ruby-on-rails - 使用 rspec 测试服务对象作业
我有以下工作:
服务看起来像这样:
我正在尝试使用以下规范对其进行测试:
为什么变量值一直返回 nil 我收到以下错误“nil:NilClass 的未定义方法‘状态’”
但是,当我返回一个简单的布尔值时,
allow(Test::AragornService.new(key)).to receive(:call).and_return(true)
它将变量值设置为 true
这是 ServiceResult 类:
ruby-on-rails - 如何将数据从我的服务对象传递到我的控制器?
这是我的服务对象的代码app/services/grab_feed_from_jse.rb
:
当我pry
在该文件的末尾执行 a 时,这是我得到的响应:
这样就有了我想要的结果。请注意我的@titles
对象上可访问的所有方法。
但是,当我尝试以这样的方式执行此服务对象时portfolio_controller.rb
:
结果如下所示:
为什么对象不同?
如何在该服务对象的类中获取我@titles
的对象GrabFeedFromJSE
,以便@output
我的控制器中的实例变量可以访问。
ruby-on-rails - Rails 5.2 非当前用户的服务对象
我正在尝试通过 rails 5.2 中的服务对象方法将操作转发给另一个控制器。
创建操作应该传递创建操作的用户 ID,但我未能正确传递该参数。
业务逻辑如下:用户租用资产,潜在租用者提出请求,当资产所有者同意访问时,在另一个控制器中创建租用用户作为客户端组织访问。
我正在尝试解决客户端控制器中的创建操作,如下所示:
在租金控制器中:
然后在 app/service/newclient_service.rb
这段代码完成了这项工作。数据库已满,验证和强大的参数似乎有效,在我看来它足够健壮/安全。
问题:服务对象(我的方式?)路由是转发该操作的最首选方式吗?
谢谢你的帮助,
ruby-on-rails - 如何在 Rails 服务对象中显示 Flash 消息
我想将服务对象添加到我的控制器中。是否有机会在此服务对象中包含闪存消息?
user_stocks_controller
服务对象user_stocks_creator
使用此代码,我有一个错误:
未定义的局部变量或方法“flash”
ruby-on-rails - Rails 销毁操作不会删除
我想将服务对象添加到我的控制器中。然而,销毁操作似乎无法正常工作 - 基本上它不会删除任何内容,只是重定向到没有 Flash 消息的页面。
user_stock_destroyer.rb
user_stocks_controller.rb
ruby-on-rails - 如何将自我从模型传递到服务对象
我想将 deftrack_item_added
从模型移动到服务对象。模型:
和我的服务对象
现在在对象服务中是在 deftrack_item_added
但是现在当我启动这个函数时我得到一个错误
可能是我在构造函数中传递 self 的问题(新)
ruby-on-rails - Rails 在 Service 对象中使用私有和受保护的方法
我正在尝试将一些业务逻辑从我的一个控制器中移出,StoreController
并移到一个新的Store::CreateService
服务对象中。最近学习了服务,这似乎不是实现它们的既定模式。我在尝试调用受保护的方法时遇到错误。我显然可以将逻辑从那些受保护的方法中直接移入execute
,但我的理解是这对 Rails 应该没问题。
这是服务对象
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
ruby-on-rails - Rails:未初始化的常量 - 无法从控制器访问另一个类
search_handlers_controller.rb
/services 中的 MatchService.rb:
从 SearchHandlersController#match 调用 MatchService 时出错:
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 教程,以找到任何使用服务对象来接收消息的人,但一无所获。求救!