【问题标题】:Method Help in Ruby on RailsRuby on Rails 中的方法帮助
【发布时间】:2017-12-14 18:33:00
【问题描述】:

我一直在关注我的老板建议我使用的一本书,Agile Web Development With Rails 4。

这本书的摘录让我陷入了一个关于如何完成它所要求的内容的循环:


方法

让我们编写一个返回愉快的个性化问候的方法。我们将调用 这种方法几次。

def say_goodnight(name)
  result = 'Good night, ' + name
  return result
end

#该睡觉了...

puts say_goodnight('Mary-Ellen') # => 'Goodnight, Mary-Ellen'

puts say_goodnight('John-Boy') # => 'Goodnight, John-Boy'

定义方法后,我们调用它两次。在这两种情况下,我们都会传递结果 到方法puts(),它将其参数输出到控制台,后跟一个 换行符(转到下一行输出)。 语句末尾不需要分号,只要将每个 在单独的行上声明。 Ruby cmets 以 # 字符开头,然后 跑到行尾。缩进不重要(但两个字符 缩进是事实上的 Ruby 标准)。 Ruby 不使用大括号来分隔复合语句的主体和 定义(例如方法和类)。相反,您只需完成身体 用关键字 end。关键字 return 是可选的,如果不存在,则 最后一个表达式的计算结果将被返回。


首先,使用这种特殊方法,您会在控制器或模型中定义它吗?同样,在视图中调用该方法的确切方法是什么?我尝试了多种不同的方法,但似乎总是出现以下错误屏幕:

SayController#say_goodnight 中的参数错误

参数数量错误(给定 0,预期为 1)

【问题讨论】:

    标签: ruby-on-rails methods


    【解决方案1】:

    让我们看看你的错误日志:

    ArgumentError in SayController#say_goodnight
    
    wrong number of arguments (given 0, expected 1)
    

    这意味着在你的类SayController,方法say_goodnight 中你没有提供所需数量的参数。这意味着您在代码中的某处拥有:

    say_goodnight()
    

    而不是

    say_goodnight(name)
    

    我不太清楚您的书是否只是想教您 Ruby 方法,或者还讨论 Ruby on Rails MVC(模型、视图、控制器)架构。我假设它是第一个。如果您正在编写 Rails 应用程序,那么包含您正在使用的相应模型、视图和控制器代码也会有所帮助。

    【讨论】:

    • 我找不到任何我有 say_goodnight() 的实例。但是,当我尝试调用代码时,我一直在使用类似于
    • @K.Davis 尝试查看您是否在代码中某处没有括号的情况下提到了say_goodnight
    • @K.Davis 从我所见,您的原始代码看起来不错。您通常可以从 Rails 调试日志中跟踪堆栈跟踪并查看出错的代码行。你能把它也包括进去吗?
    • ArgumentError(参数数量错误(给定 0,预期为 1)):app/controllers/say_controller.rb:9:in say_goodnight' Started GET "/say/say_goodnight" for 127.0.0.1 at 2017-12-14 14:18:10 -0500 Processing by SayController#say_goodnight as HTML Completed 500 Internal Server Error in 1ms ArgumentError (wrong number of arguments (given 0, expected 1)): app/controllers/say_controller.rb:9:in say_goodnight'
    • 我很抱歉,我还是相当新的,所以我不确定如何为你获取这些数据。这是我尝试转到此视图时命令提示符告诉我的内容。
    最近更新 更多