在模型中包含视图代码是否有效?

时间:2012-04-09 05:11:14

标签: ruby-on-rails rails-activerecord erb

伙计我是RoR和MVC的新手。

我有一个处理贷款受益人数据的模型。为了访问结构化数据(包括一小段HTML数据),我创建了一个像这样的方法

class Beneficiary  < ActiveRecord::Base
  def  info
     "#{name}</br>#{age},#{sex}</br><b>Address :</b>#{address}"
  end
end

在视图中,我正在使用此类信息

<%= @b.info.html_safe %>

是, b 是受益人类的实例

这对我来说很好。我只是想知道,我是否违反了MVC规则?在模型中包含视图代码是否有效?

3 个答案:

答案 0 :(得分:3)

如果您想使用HTML标记显示数据,您可以编写帮助方法而不是写入模型。或者您想要重新考虑或清理代码,您可以观看draperpresenter < / p>

答案 1 :(得分:2)

最好将其放入帮助文件中。

# /app/helpers/beneficiary_helper.rb

module BeneficiaryHelper

  def beneficiary_info(b)
    "#{b.name}<br>#{b.age},#{b.sex}<br><b>Address:</b>#{b.address}"
  end
end

在您看来,您只需使用

即可
<%= raw beneficiary_info(@b) %>

注意:我建议使用带有class属性和CSS的<span>元素来处理换行符和字体粗细,而不是<br><b>

附加说明:如果您希望帮助程序可用于整个应用程序,可以将其放在/app/helpers/application_helper.rb

答案 2 :(得分:0)

我确定一个模型放置HTML的地方,使用帮助器肯定是一种改进,但考虑使用部分的可能性:

# /views/beneficiaries/_beneficiary.html.erb
<%= beneficiary.name %><br />
<%= beneficiary.age %>,<%= beneficiary.sex %><br />
<b>Address :</b><%= beneficiary.address %>

然后在您的视图中,当您需要显示受益人信息呈现此部分时:

<%= render @beneficiary %>

更新:如果您需要以某种方式显示受益人并以不同的方式显示他/她的信息,则应将受益人信息放入 /views/beneficiaries/_info.html.erb ,然后以这种方式调用渲染:

render :partial => "beneficiaries/info", :locals => {beneficiary: @beneficiary}