【问题标题】:Should logic changing the URL based on the state of a model be in the controller or the model?基于模型状态更改 URL 的逻辑应该在控制器还是模型中?
【发布时间】:2015-04-17 01:19:01
【问题描述】:

我正在使用带有 aasm 的 Rails 4.2 来为项目创建状态机。该项目可以在不同状态之间转换(createdonboardedchecked_out 等),我想创建一个页面,其中操作 url 根据项目的状态而变化。例如,如果它已经是created,则操作可能是onboard

从设计的角度来看,我可以在模型本身上放置一个函数,如 next_step_path,它将根据状态返回正确的 URL,并在模型中使用像 Rails.application.routes.url_helpers 这样的 Rails 助手。或者我可以在控制器中使用该逻辑,根据模型的状态生成 URL。

这有一个通用的设计模式吗?我最初将它写入模型,但我现在倾向于控制器,因为我需要生成 URL 和基于它的显示。

【问题讨论】:

  • 我的方法是在生成 url 的特定辅助函数中利用模型中的状态。然后调用控制器中的函数。但我愿意听取更好的方法。
  • 模型不应该对 url 有任何了解。辅助方法是有意义的。或者控制器,如果可行的话。或者创建一个既不是 ActiveRecord 模型也不是控制器的新类,并从控制器和/或辅助方法中调用它。

标签: ruby-on-rails model-view-controller


【解决方案1】:

您正在寻找的可能是演示者。不要认为它应该在帮助器中,因为它是特定于模型的。 Presenters 包装模型以提供与视图相关的属性。

class ItemPresenter
  def initialize(object)
    @object = object
  end

  def next_step_path
  end

  def method_missing(method)
    @object.send(method)
  end
end

http://eewang.github.io/blog/2013/09/26/presenting-the-rails-presenter-pattern/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2011-03-12
    • 2017-11-02
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多