我正在尝试遵循指南:

瘦控制器;胖模型

当一个方法想要在控制器中使用它时,如何调用模型中定义的方法?什么是 "Helper Method""Module" 以及那些用于传递方法的方法是什么?

假设我有 Car 的模型,控制器和视图,


models / car.rb.

# == Schema Information ==
#
#  Table name: cars
#
#  id             :integer(4)      not null, primary key
#  make           :string(255)
#  model          :string(255)
#  year           :integer(4)
#
class Car < ApplicationRecord

end

controllers / cars_controller.rb

class CarsController < ApplicationController

  def show
    @car = Car.find(params[:id])
  end

end

views / show.html.erb

<h1>My Car</h1>
<p>
  My car is a <%= @car.description %>.
  <%# Expected output "My car is a 1967 Chevy Impala" %>
</p>

如果我希望我的 description 方法类似于:

def description
    car.year + ' ' + car.make + ' ' + car.model
end

我在哪里放这个方法?我假设不是控制器 . 如果它进入模型,我该如何从Controller调用它?另外,如果我有 trucksboats 的模型,我可以使用帮助方法来调用我的 description 方法吗?那么我是否需要将该方法放入模块中?如果是这样,你会将模块命名为什么,将它保存在哪里,以及如何在模型或控制器中调用它?

我一直在读你应该把逻辑从控制器中取出来,你应该把它放在模型中,然后在需要的时候在控制器中调用它 . 我还读到你应该把它放在一个模块或一个帮助器方法中并以这种方式调用它 . 我希望有人可以解释如何做这些事情以及为什么你会做一个而不是另一个 .