【问题标题】:Does it belong to controller or model?它属于控制器还是模型?
【发布时间】:2016-01-25 08:48:59
【问题描述】:

我有这个before_action 方法:

  def convert_duration_reminder
    allowed_duration_units = %(hour day)
    if allowed_duration_units.include? params[:store][:store_setting_attributes][:reminder_unit]
      store_settings_params = params[:store][:store_setting_attributes]
      @duration_reminder = store_settings_params[:reminder_duration].to_i.send(store_settings_params[:reminder_unit]).to_i / 3600
    else
      redirect_to store_settings_store_path(id: current_store.id)
    end
  end

我内心有一点点逻辑。 @duration_reminder 用于update_attributes

它属于控制器吗?对我来说是的,因为我正在使用参数并且我有一个重定向并且方法很短(行长除外......)并且不处理数据库中的任何数据。

此方法只是根据用户在视图中选择的内容(“2 小时”、“1 天”)以分钟为单位转换时间。

来自Rails 4 action这本书,它是这样写的:

■ 模型包含应用程序的域逻辑。这个逻辑 指示如何检索、验证数据库中的记录或 被操纵。在 Rails 应用程序中,模型定义了代码 与数据库的表交互以检索和设置信息 在他们之中。域逻辑还包括诸如验证或 要对数据执行的特定操作。

■ 控制器与模型交互以收集信息以发送到视图。他们是 用户和数据库之间的层。他们调用方法 模型类,它可以返回代表行的单个对象 这些对象的数据库或集合(数组)。控制器 然后通过实例使这些对象对视图可用 变量。控制器也用于权限检查,例如 确保只有具有特殊权限的用户才能执行 某些操作可以执行这些操作,而没有这些操作的用户 权限不行。

def convert_duration_reminder 是否属于控制器?

【问题讨论】:

  • @Pavan:我的问题是“def convert_duration_reminder 方法是否属于控制器?”
  • 是的。它应该属于控制器。
  • 如果他们是不赞成投票的人,请添加评论以解释原因...

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


【解决方案1】:

一个简单的测试(是否是控制器/模型操作)是查看操作的目的 - 它是否适用于 dataparams

Rails 模型旨在与应用程序中的许多高级逻辑“隔离”;它旨在提供一组基本级别的操作来操作插入到数据库中的数据;任何需要请求级数据的东西都应该在控制器中处理。

这样……

redirect_to store_settings_store_path(id: current_store.id)

...因为您正在操纵应用程序的流程,所以您的逻辑应该保留在控制器中。

如果您没有重定向(IE 只是在处理数据),您可以将此功能放入模型中的 before_create 回调中。

【讨论】:

  • 没问题,很高兴我能帮上忙!
猜你喜欢
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2012-06-02
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 2012-02-09
相关资源
最近更新 更多