【问题标题】:Rails chomp method not workingRails chomp方法不起作用
【发布时间】:2013-02-20 19:08:11
【问题描述】:

我的模型方法中有以下代码行。

subjectsinlist='['
subjectlist.subjects.each do |subject|
     subjectsinlist=subjectsinlist+subject.subject_code+', '
end
subjectsinlist.chomp(', ')
subjectsinlist+="]"

要附加的字符串示例如下:

CPE205 CPE206 CPE301 CPE302 HW0210

我期望结果是:

[CPE205, CPE206, CPE301, CPE302, HW0210]

但我得到的是:

[CPE205, CPE206, CPE301, CPE302, HW0210, ]

chomp 方法似乎不起作用。 任何关于为什么会发生的建议将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rails-activerecord chomp


    【解决方案1】:

    chomp 返回一个新字符串,见here

    但你必须将新字符串分配给一个变量:

    subjectsinlist = subjectsinlist.chomp(', ')
    

    【讨论】:

    • 谢谢,我不知道为什么它不起作用,因为我在控制台中做了完全相同的事情并收到了正确的输出。
    • 因为在您的模型中您忘记将 subjectinlist.chomp(', ') 分配给变量。如果你这样做,subjectinlist = subjectinlist.chomp(', ') 从 chomp() 返回的新字符串将被分配给 subjectinlist :) 在控制台中使用 subjectinlist.chomp(', ') 会给你正确的输出,但它仅呈现该输出。
    • 我现在明白了。感谢您的帮助。
    • 你也可以用chomp!方法来修改字符串并避免重新分配变量。示例:subjectinlist.chomp!(', ')
    【解决方案2】:

    这可以解决问题:

    codes = "[#{subjectlist.subjects.map(&:subject_code).join(', ')}]"
    

    一些解释:

    • map(&:subject_code) 将对subjectlist.subjects 返回的数组的每个元素调用subject_code 方法

    • join(', ') 将把 ', '(逗号空格)放在数组的每个元素之间(最后一个元素除外)。

    join 方法正是您所需要的 ;-)

    【讨论】:

    • 刚刚尝试过,这在整洁的同时效果很好,但我不得不接受关于 chomp 的答案,因为他具体回答了我的要求。还是谢谢。
    • 好吧,使用chomp 有点错误,因为我们不想迭代数组的每个 x 元素。我们只想迭代 x-1 个元素(除了最后一个元素)。这就是为什么join 完全适合这里。
    • 谢谢。我也在使用这个,你的解释很清楚。作为 ruby​​ 的新手,我基本上只是尝试了我所知道的一切来让它工作。所以我非常感谢您向我介绍一种新方法。
    【解决方案3】:

    subjectsinlist = '[' + subjectlist.subjects.join(', ') + ']'

    应该可以的。

    chomp 不适合您的原因是它返回一个新字符串,而不是更改现有字符串:http://apidock.com/ruby/String/chomp

    【讨论】:

    • 试过了,但我想要列表的特定属性。这是一种更简洁的表达方式,非常感谢!
    • subjectlist.subjects 将返回您尝试加入的主题对象。 (在您编辑之前先咀嚼),但我们需要每个主题的 subject_code 属性 ...
    • 是的,在最初的代码中,由于格式错误,并没有立即清楚:您的解决方案是正确的。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2021-12-26
    • 2017-05-23
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多