Mat*_*att 4 ruby-on-rails generator twitter-bootstrap twitter-bootstrap-rails
安装了twitter-bootstrap-rails,使用生成器:
rails g bootstrap:themed Model
Run Code Online (Sandbox Code Playgroud)
创建包含以下行的视图:
<th><%= model_class.human_attribute_name(:comment_date) %></th>
<th><%= model_class.human_attribute_name(:comment_time) %></th>
Run Code Online (Sandbox Code Playgroud)
默认rails生成器直接插入人类可读列名称:
<th>Comment date</th>
<th>Comment time</th>
Run Code Online (Sandbox Code Playgroud)
这使得视图更清晰,并且似乎在运行时更有效.
twitter-bootstrap-rails生成的视图有什么好处吗?
谢谢!
(PS,开发者网站是离线的,github和google +都不允许发送私信,github上的"问题"和google +帖子上的公开评论似乎都不适合这个问题,所以希望有人在这里熟悉model_class.human_attribute_name()的用例
看看它的来源,事情会很清楚:
# File activemodel/lib/active_model/translation.rb, line 45
def human_attribute_name(attribute, options = {})
defaults = []
parts = attribute.to_s.split(".", 2)
attribute = parts.pop
namespace = parts.pop
if namespace
lookup_ancestors.each do |klass|
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}/#{namespace}.#{attribute}"
end
defaults << :"#{self.i18n_scope}.attributes.#{namespace}.#{attribute}"
else
lookup_ancestors.each do |klass|
defaults << :"#{self.i18n_scope}.attributes.#{klass.model_name.i18n_key}.#{attribute}"
end
end
defaults << :"attributes.#{attribute}"
defaults << options.delete(:default) if options[:default]
defaults << attribute.humanize
options.reverse_merge! :count => 1, :default => defaults
I18n.translate(defaults.shift, options)
end
Run Code Online (Sandbox Code Playgroud)
human_attribute_name在本地化您的属性名称方面做得很好.即使您正在构建仅使用英语的应用程序 - 谁知道,也许您的收件箱已经收到了客户关于其扩展业务计划的电子邮件,此扩展将包括人们从右向左书写的国家/地区.
假设您有Product带title属性的模型.这样打电话human_attribute_name:
Product.human_attribute_name 'title'
Run Code Online (Sandbox Code Playgroud)
将I18n.t使用以下参数调用(请参阅上面代码段中的最后一行):
I18.t 'activerecord.attributes.product.title', {
:count=>1,
:default=>[:"attributes.title", "Title"]
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以提供特定于某些模型的翻译,并且特定于某些属性的名称.除非您提供任何这些翻译,否则您将通过humanize方法获得您的属性的英文版本.
| 归档时间: |
|
| 查看次数: |
2125 次 |
| 最近记录: |