2012-04-09 36 views
2

伙计们我是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规则?在Model中包含视图代码是否有效?

回答

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) %> 

注:我建议你使用<span>元素与类属性和CSS来处理换行和字体粗细,而不是<br><b>

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

3

如果你想使用HTML标记来显示数据,你可以写,而不是写入model.Or辅助方法,更要重因子或清理你的代码,你可以看draperpresenter

0

我敢肯定模型是放在哪里HTML,使用一个帮手是肯定的改善,但考虑到可能使用的部分的地方:

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

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

<%= render @beneficiary %> 

UPDATE:如果您需要显示的方式受益人和他/她以不同的方式信息,你应该把受益人信息在/视图/受益人/ _in fo.html.erb,然后以这种方式调用渲染:

render :partial => "beneficiaries/info", :locals => {beneficiary: @beneficiary} 
相关问题