gpt4 book ai didi

ruby-on-rails - 赋予模型属性方法

转载 作者:行者123 更新时间:2023-12-04 06:59:31 26 4
gpt4 key购买 nike

我的 Song型号有 lyrics文本属性。由于新行是 \n -在我的歌词中分开,我经常发现自己在我的 View 中这样做是为了使歌词对 HTML 友好:

@song.lyrics.strip.gsub(/\n/, "\n<br />")

我在重复 gsub我的应用程序中的所有逻辑,更糟糕的是,我无法更改存储歌词的格式,而无需触及我尝试将它们打印为 HTML 的任何地方。

我想抽象一下,以便我可以在我的观点中写下这个:
@song.lyrics.to_html

这样 strip.gsub(/\n/, "\n<br />")逻辑只出现在我的应用程序的一处(在 to_html 方法中)。

最好的方法是什么?

最佳答案

如果您需要使用确切的 @song.lyrics.to_html语法并且您不想创建 Lyrics 模型,您可以向 lyrics 返回的字符串添加单例方法方法:

class Song
def lyrics
str = read_attribute(:lyrics)
def str.to_html
strip.gsub(/\n/, "\n<br />")
end
str
end
end

然而,这并不是一个真正伟大的设计。对于更可重用的东西,您可能需要编写一个带有 to_html 的模块。像这样的方法:
module HtmlFormatter
def to_html(attribute)
send(attribute).strip.gsub(/\n/, "\n<br />")
end
end

如果您 include HtmlFormatter在您的 Song 模型中,您可以像这样调用该方法:
@song.to_html(:lyrics)

所以它不完全遵循你想要的语法,但我认为这是一个更好的设计。

您可能还想考虑一个单独的 Lyrics 模型,它可以具有各种功能,但这对于您的应用程序来说可能太重了。

关于ruby-on-rails - 赋予模型属性方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com