在模型中使用帮助器

时间:2016-01-18 15:34:18

标签: ruby-on-rails ruby model helper

我可以在模型中使用哪个帮助程序在视图中将 html代码填充为字符串

这是我目前在我的模型中使用的方法:

 def state_country_name
    "#{self.name}  (#{self.country.name})"
 end

我想用{self.country.name}范围中包裹class: pull-right

我已经尝试过:

  def state_country_name
    "#{self.name} #{helpers.content_tag(:span, self.country.name, class: "pull-right")}"
  end

  def helpers
    ActionController::Base.helpers
  end

结果

London <span>England</span>

我使用 autocomplete-rails4-gem ,这是我的表单输入:

= f.input :city_name, :url => autocomplete_city_name_companies_path, :as => :autocomplete, :id_element => "#company_city_id", input_html: {:value => @company.city.name, class: 'form-control'}

autocomplete_city_name_companies行动的代码:

autocomplete :city, :name, :full => false, :display_value => :state_country_name, :extra_data => [:state_id]

2 个答案:

答案 0 :(得分:2)

我建议在这里采用Presenter方法,因为它会给你一个放置可以与ruby模型一起工作但它的逻辑不属于模型本身的表示逻辑的地方。您可以使用Draper或其他几个宝石来执行此操作,但这里有一些代码来演示这个概念到底有多简单:

示例演示者:

unsigned char

或者如果您想采用装饰器方法:

class CompanyPresenter < Struct.new(:company)
  def state_country_name
    company.country.name
  end

  # act as proxy for unknown methods
  def method_missing(method, *args, &block)
    company.public_send(method, *args, &block)
  end
end

@presentable_company = CompanyPresenter.new(@company)

答案 1 :(得分:1)

我认为你不应该在你的模特中这样做。而是将助手方法放在助手文件中。 在你的model_helper.rb中:

def my_helper(model)
html = <<-EOT
<span class="pull-right">{model.country.name}</span>
EOT
html.html_safe
end

在您看来:

<%= my_helper(@model_object) %>