首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法将方法从帮助器调用到模型中

无法将方法从帮助器调用到模型中
EN

Stack Overflow用户
提问于 2015-09-15 22:52:33
回答 1查看 38关注 0票数 0

我希望使用这段代码,但是我很难让它正常工作。它包含在一个模型中:

代码语言:javascript
复制
def to_pdf
  title = @account.name
  subtitle = "Account Statement: #{@month_name} #{@year}"
  StatementPDF.new(title, subtitle, transactions).render
end

事务方法存储在一个帮助文件中(不要问),但我似乎不能调用它。有什么建议吗。

代码语言:javascript
复制
def transactions(account_id, start, finish)
  return @transactions if @transactions 
  response = get_call('/Accounts/Statements/' + account_id.to_s + '/' + start + '/' + finish)
  response = JSON.parse(response.body)
  @transactions = response.map {|txn| Transaction.new(txn)}
end

我有关于我的交易方法的放置的建议,但由于高于我的工资等级的原因,我不得不将其放在那里。最奇怪的是,它在某一时刻工作,当我重新加载环境时,只是为了检查一切是否正常工作,它再次停止工作。有什么建议吗?

EN

Stack Overflow用户

发布于 2015-09-16 00:09:51

(移动到回答可读性,但它更多的是一个扩展的注释。)

辅助对象是用于视图的。

从视图层发出HTTP请求是不好的,因为(a)它在视图层中放入了太多的逻辑,(b)它是违反直觉的,可能会被滥用,例如,有人可能会意外(或故意)多次调用它,这可能会导致两倍的成本。

(由于缓存的排序,根据对@transactions的访问,这部分得到了缓解。)

类似这样的东西属于从控制器调用的实用程序类。(通常,只有控制器应该生成传递到视图中的数据。)这使得控制器更容易测试,因为您可以简单地模拟/存根顶级实用程序类方法,而不必使用假的web层、模拟get_call等。

无关,但Ruby更喜欢字符串插值而不是连接,例如,

代码语言:javascript
复制
response = get_call("/Accounts/Statements/#{account_id.to_s}/#{start}/#{finish}")

我也不喜欢这样的原始调用,我更喜欢在某种形式的API机制后面看到它们,特别是如果这是整个应用程序中使用的模式,比如:

代码语言:javascript
复制
def get_transactions_data(account_id, start, finish)
  response = get_call("/Accounts/Statements/#{account_id.to_s}/#{start}/#{finish}")
  JSON.parse(response.body)
end

(我甚至还可以创建一个URL生成器,但我喜欢非常简洁、易于交流的代码。)

将它们转换为Transaction对象的步骤可能也属于也可能不属于,这取决于你的应用程序是如何布局的,以及层分离的程度。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32589185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档