特定参数顺序的语法错误
Syntax error with specific argument order
使用此代码:
Sponsorship.includes(patient: :vaccinations, :backer)
我得到 syntax error, unexpected ')', expecting =>
。但是当我像这样改变参数的顺序时:
Sponsorship.includes(:backer, patient: :vaccinations)
错误消失了。为什么语法错误取决于参数的顺序?
那是无效的 ruby 语法。你的意思可能是:
@sponsorship = Sponsorship.includes(patient: [:vaccinations, :backer]).find_by_slug(params[:id])
注意patient:
和:patient =>
是一样的,都是散列的关键部分。所以 ruby 期望下一个是哈希值的一半,而不是事物列表。我将其更改为数组(不确定这是否是您的意思)。
因为如果您依赖 Ruby 语法糖来避免自己编写 {}
,那么散列参数必须是最后一个参数。
includes
方法期望找到散列作为最后一个参数。您必须这样传递哈希。否则你必须把 {}
放在散列周围。
@sponsorship = Sponsorship.includes(:backer, patient: [:vaccinations]).find_by_slug(params[:id])
您有两个有效的选择:
@sponsorship = Sponsorship.includes({ patient: :vaccinations }, :backer)
.find_by_slug(params[:id])
@sponsorship = Sponsorship.includes(:backer, patient: :vaccinations)
.find_by_slug(params[:id])
第一次有 2 个参数,第一个是散列,第二个是值,
在第二个例子中你仍然有 2 个参数,第一个是值,第二个是隐式哈希。在 ruby 中,当散列是传递给方法的最后一个参数时,您可以省略括号
你在这里做了什么:
@sponsorship = Sponsorship.includes(patient: :vaccinations, :backer)
.find_by_slug(params[:id])
解释为:
@sponsorship = Sponsorship.includes({ patient: :vaccinations, :backer })
.find_by_slug(params[:id])
这显然是错误的,因为哈希需要 { key0: value0, keyN: valueN }
语法。
使用此代码:
Sponsorship.includes(patient: :vaccinations, :backer)
我得到 syntax error, unexpected ')', expecting =>
。但是当我像这样改变参数的顺序时:
Sponsorship.includes(:backer, patient: :vaccinations)
错误消失了。为什么语法错误取决于参数的顺序?
那是无效的 ruby 语法。你的意思可能是:
@sponsorship = Sponsorship.includes(patient: [:vaccinations, :backer]).find_by_slug(params[:id])
注意patient:
和:patient =>
是一样的,都是散列的关键部分。所以 ruby 期望下一个是哈希值的一半,而不是事物列表。我将其更改为数组(不确定这是否是您的意思)。
因为如果您依赖 Ruby 语法糖来避免自己编写 {}
,那么散列参数必须是最后一个参数。
includes
方法期望找到散列作为最后一个参数。您必须这样传递哈希。否则你必须把 {}
放在散列周围。
@sponsorship = Sponsorship.includes(:backer, patient: [:vaccinations]).find_by_slug(params[:id])
您有两个有效的选择:
@sponsorship = Sponsorship.includes({ patient: :vaccinations }, :backer)
.find_by_slug(params[:id])
@sponsorship = Sponsorship.includes(:backer, patient: :vaccinations)
.find_by_slug(params[:id])
第一次有 2 个参数,第一个是散列,第二个是值,
在第二个例子中你仍然有 2 个参数,第一个是值,第二个是隐式哈希。在 ruby 中,当散列是传递给方法的最后一个参数时,您可以省略括号
你在这里做了什么:
@sponsorship = Sponsorship.includes(patient: :vaccinations, :backer)
.find_by_slug(params[:id])
解释为:
@sponsorship = Sponsorship.includes({ patient: :vaccinations, :backer })
.find_by_slug(params[:id])
这显然是错误的,因为哈希需要 { key0: value0, keyN: valueN }
语法。