gpt4 book ai didi

ruby-on-rails - Rails 中什么时候使用符号?

转载 作者:数据小太阳 更新时间:2023-10-29 08:06:56 25 4
gpt4 key购买 nike

我假设其中很多是内置的或约定的,但是像 belongs_to 或 require 这样的方法使用一个符号作为它作为参数的模型名称。

当涉及到像 before_action 这样的方法时,我不确定为什么 Controller 操作前面有一个符号,如下方括号中所示。

before_action :find_course, only: [:show, :edit, :update, :destroy]

是否所有这些符号都用作哈希的键,还是大多数方法都将符号作为其参数?

最佳答案

第二个。大多数方法都将符号作为参数。原因如下:When to use symbols instead of strings in Ruby?

这是before_action的方法签名:

before_action(names, options)

如您所见,它首先接受一个名称,然后是一些选项作为它的参数。按照惯例,options 是一个散列。因为 Ruby 允许您删除大量的“行噪声”,所以散列周围的括号是隐式的。您可以编写与以下相同的行:

before_action(:find_course, { only: [:show, :edit, :update, :destroy] })

所以 :find_course 不是散列的键,只有 是。

此外,:find_course 不是模型的名称,而是方法的名称。通过将方法名称(作为符号)传递给 before_action,该方法将在处理每个请求之前执行(例如,在 #show 之前)。通过 options,可以将操作限制为某些操作。这些再次作为符号提供,因为它们是内部标识符。从技术上讲,它们都是再次引用 Controller 上的方法。

传递引用方法或类的符号是 Rails 中非常常见的做法。 belongs_to 使用相同的约定将关联方法添加到您的模型 (belongs_to :user)。除非您另外指定,否则 Rails 将尝试将此方法名称连接到名为 User 的模型。这是 Rails 的魔力 的一部分,它使它非常易于使用,但一开始有点难以理解。

充分理解 Ruby 和符号与字符串有助于您更好地理解这一点。

编辑:

要了解“内部标识符”的含义,请在对您的问题的评论中查看由 Deep 链接到的问题:Why do callbacks use symbols in Ruby on Rails它解释了为什么你需要引用一个方法,而不是像这样做:

before_action(find_course)

总而言之,这将执行 find_course 并将其结果 传递给 before_action,这不是您想要的。因此,您需要以某种方式引用该方法,以便以后可以调用它。

在其他语言中,这可以通过字符串或通过传入函数对象来完成。例如,在 Python 中,您可以执行一些操作 before_action(print)。这将传递对函数的引用而不调用它。遗憾的是,这在 Ruby 中是不可能的,因此我们需要传入带有方法名称的字符串或符号,这让我们回到第一个链接问题,即符号作为引用相对于字符串的优势。

关于ruby-on-rails - Rails 中什么时候使用符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45295646/

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