何时使用 Helpers 和 Model

34

我刚接触Rails,想知道何时应将代码放入Helper中,而不是放入Model中。

在这方面有什么“经验法则”吗?

3个回答

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  

这里是指南中的Helpershttp://guides.rubyonrails.org/form_helpers.html

还有Modelshttp://guides.rubyonrails.org/active_record_querying.html


"复杂的HTML代码,例如一个什么?" - Mittenchops
1
那是<table>,但我使用了<>而不是>和< - 感谢你的提醒! - Chuck Bergeron
@ChuckBergeron 或者你可以使用反引号来表示代码的使用。我已经为您修复了它。 ;) - Joshua Pinter
1
@JoshuaPinter 经典,那时候我还不知道反引号的用法。 - Chuck Bergeron

7

当希望在视图中显示的代码由helper创建时,最好使用helper。例如,如果您想要编写帮助创建HTML链接的方法,则应将其放入helper中:

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

4

助手应该只包含视图逻辑

模型应仅包含与建模对象相关的逻辑,永远不涉及执行的事务或呈现的视图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接