关于ruby:Rails:main:Object的未定义方法” truncate \\”

Rails: Undefined method `truncate' for main:Object

我需要按照Rails API ActionView :: Helpers :: TextHelper上的说明在rails控制台中执行此操作
在下面的Stackoverflow讨论中,我已经找到了解决我问题的方法,但是我可以很好地发布该问题。
如果要我删除它,请告诉我。

  • 我想在Rails控制台中创建ActionView::Helpers::TextHelper

    1
    2
    texthelper = ActionView::Helpers::TextHelper
    => ActionView::Helpers::TextHelper
  • 我创建一个字符串

    1
    2
    string ="I want to call the truncate method"
    =>"I want to call the truncate method"
  • 我想在控制台中的此字符串上调用truncate方法。

    1
    2
    truncate(string, length: 25, omission: '... (continued)')
    =>"And they f... (continued)"
  • 当我在控制台中输入时:

    1
    truncate("Once upon a time in a world far far away", length: 17, separator: ' ')

    我收到

    1
    undefined method `truncate' for main:Object

    整个想法都来自这篇文章。
    模型

    中的未定义方法" truncate"


    对于Rails 6和ruby 2.6。*,可能会有一些问题,至少我在截取RTF文本时遇到了一个不确定的错误。因此,在ActionText和Truncate中,我找到了解决方案,它可能很有用=>

    1
    <%= truncate(strip_tags(blog.body.to_s), length: 450) %>

    我在下面的讨论中找到了答案型号中的未定义方法'truncate'

    我应该使用以下命令在我的Rails控制台中包含ActionView :: Helpers :: TextHelper。

    1
    include ActionView::Helpers::TextHelper

    然后我可以调用truncate方法。

    1
    2
    truncate(string, length: 17, separator: ' ')
    =>"this is a tesf..."

    我现在的理解是,通过include命令,ActionView::Helpers::TextHelper中的方法现在可以在控制台中使用。可以在text上执行truncate方法。


    添加到Ahsan的答案中

    在Rails 6应用程序上工作时,我尝试在具有ActionText属性的视图上添加调用truncate方法。

    就是这样,我有一个名为About的模型,其属性为title,而ActionText属性为body

    因此,当我尝试使用以下方法在视图中调用body的ActionText属性上的truncate方法时:

    1
    <%= about.body.truncate(30) %>

    我得到了错误:

    1
    undefined method `truncate' for #<ActionText::RichText:0x00007fe5c4828488>

    这是我修复的方式:

    按照Ahsan的回答,我只是将代码行修改为此:

    1
    <%= truncate(strip_tags(about.body.to_s), length: 30) %>

    它像魅力一样工作。

    您可以在Official Rails文档中阅读有关truncate方法的更多信息:ActionView Truncate

    仅此而已。

    我希望这会有所帮助


    在Rails控制台中遵循以下步骤:

    1
    2
    3
    include ActionView::Helpers::TextHelper
    truncate(string, length: 25, omission: '... (continued)')
    =>"Once upon ... (continued)"

    此处" ActionView :: Helpers :: TextHelper"是模块,提供了一组用于格式化和转换字符串的方法。

    截断方法位于TextHelper模块中,因此您必须将其包含在控制台中。