【问题标题】:Is it valid to include view code in Model?在模型中包含视图代码是否有效?
【发布时间】:2012-04-09 05:11:14
【问题描述】:

各位,我是 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 是 Beneficiary 类的一个实例

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

【问题讨论】:

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


    【解决方案1】:

    如果您想使用 HTML 标签显示数据,您可以编写辅助方法而不是写入模型。或者更多您想要重构或清理您的代码,您可以观看draperpresenter

    【讨论】:

      【解决方案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) %>
      

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

      补充说明:如果您希望助手可用于整个应用程序,您可以将其放入/app/helpers/application_helper.rb

      【讨论】:

        【解决方案3】:

        我确定一个模型它不是放置 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:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-05
          • 2012-12-17
          • 2012-01-22
          • 2012-11-16
          • 2012-03-29
          • 2012-08-04
          相关资源
          最近更新 更多