何时使用Helpers vs Model

时间:2011-02-16 17:24:07

标签: ruby-on-rails ruby-on-rails-3

我是Rails的新手,只是想知道何时将代码放入Helper而不是将代码放入模型中。

是否有“经验法则”可以这么说呢?

3 个答案:

答案 0 :(得分:27)

如果您在视图(模板)中工作,则需要使用帮助程序,并且需要构建一个复杂的HTML,例如<table>。或者,如果您想要更改一些未连接到数据库的演示数据。

def truncate_html( html, options = {} )
  options[:length] = 35 unless options[:length]
  truncate( strip_tags( html ), options )
end

在使用数据库对象时使用模型,并且希望简化业务逻辑。

  def one_day?
    start_date.to_s[0,9] == end_date.to_s[0,9]
  end  

以下是指南中的帮助http://guides.rubyonrails.org/form_helpers.html

这是模型http://guides.rubyonrails.org/active_record_querying.html

答案 1 :(得分:6)

当帮助程序创建的代码仅在视图中显示时,最好使用帮助程序。例如,如果您想要有帮助创建HTML链接的方法,那么它们应该放在帮助器中:

def easy_link user
  link_to(user.name, user)
end

如果您的代码是业务逻辑,那么它应该放在您的模型中。您还应该在模型中放置尽可能多的业务逻辑,不要在视图和控制器中使用此代码。例如,如果您要处理订单,那么该代码应该放在模型中:

def process
  raise NotReadyToProcess unless ready_to_process?
  raise NotValidPaymentDetails unless valid_payment_details?
  process_payment
end

答案 2 :(得分:3)

助手应该只包含视图的逻辑

模型应该只包含与建模对象相关的逻辑,从不与执行视图的事务相关