我确定这是一个非常愚蠢的问题,但我无法弄明白。
在我的用户模型中,我有一个
`before_save :downcase_username` #because I use custom subdomain for each user with request
def downcase_username
self.username = username.downcase
end
但是,我希望每次在视图中可见(读取?)时都标题用户名,而不是每次都指定user.username.titleize。我不知道在模型中调用哪个before_
,在控制器中我会使用before_action。
此外,有没有办法自动化这个模型的所有值? (总是在视野中标题化)
任何提示都表示赞赏。
非常感谢
答案 0 :(得分:2)
你可以制作一个自定义的吸气剂......
class User < ActiveRecord::Base
def username
self[:username].titleize
end
end
如果你只想读取视图但不想读取编辑,那么你最好使用装饰器。
答案 1 :(得分:0)
我相信after_initialize
方法可以帮到你。每次从数据库中获取对象时,都会调用所有after_initialize
方法。
class User < ActiveRecord::Base
after_initialize :titleize_username # in your case you'd wrap this in backticks
def titleize_username
self.username = username.titleize
end
end
有关回调的详细信息,请查看Rails Guide on Callbacks。
答案 2 :(得分:0)
Getter / Setter方法
@SteveTurczyn
是对的 - 您需要自定义getter
基本上,每当您拨打model
数据时,Rails基本上会使用一系列setter
& getter
methods来创建您看到的attributes
。这基本上看起来像这样:
#app/models/user.rb
Class User < ActiveRecord::Base
def attribute
"value"
end
end
getter
方法基本上是实例方法,允许您在视图/控制器中调用Object.getter
。这意味着如果您只想在视图中titleize
,则可以在模型中使用getter来设置read
对象setters
设置属性
<强> CSS 强>
另一个选择是使用CSS(text-transform: capitalize
)
这是处理前端styling
选项的一种更有效的方法,就是使用CSS
。您不必使用资源密集型ruby方法来解决简单的样式问题,而是在视图中更好地设置类,然后capitalizing
:
#app/assets/stylesheets/application.css.scss
.title_text { text-transform: capitalize; }
#app/views/your_controller/index.html.erb
<%= content_tag :div, @user.example_content, class: "title_text" %>