我可以在模型中使用哪个帮助程序在视图中将 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]
答案 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) %>