它属于控制器还是型号?

时间:2015-10-26 09:44:36

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

我有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

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

此方法只需根据用户在视图中选择的内容(" 2小时"," 1天和#34;),以分钟为单位转换时间。

从书Rails 4 action开始写道:

  

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

     

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

def convert_duration_reminder是否属于控制器?

1 个答案:

答案 0 :(得分:2)

一个简单的测试(是否是控制器/模型操作)是要查看操作的意图 - 它是否适用于数据 params

Rails模型意味着与应用程序中的大多数高级逻辑“锁定”;它旨在提供一组基本级别的操作来操作插入数据库的数据;任何需要请求级数据的内容都应该在控制器中处理。

enter image description here

就这样......

redirect_to store_settings_store_path(id: current_store.id)

...因为您正在操纵应用的,您的逻辑应保留在控制器中。

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