Ruby 具有特定参数顺序的语法错误

Ruby 具有特定参数顺序的语法错误,ruby,hash,syntax,literals,Ruby,Hash,Syntax,Literals,使用此代码: Sponsorship.includes(patient: :vaccinations, :backer) 我得到语法错误,意外“'),应为=>。但当我改变论点的顺序时,就像这样: Sponsorship.includes(:backer, patient: :vaccinations) 错误消失了。为什么语法错误取决于参数的顺序?这不是有效的ruby语法。你可能是说: @subsornance=subsornance.包括(患者:[:疫苗接种,:支持者])。按slug查找(参

使用此代码:

Sponsorship.includes(patient: :vaccinations, :backer)
我得到
语法错误,意外“'),应为=>
。但当我改变论点的顺序时,就像这样:

Sponsorship.includes(:backer, patient: :vaccinations)

错误消失了。为什么语法错误取决于参数的顺序?

这不是有效的ruby语法。你可能是说:

@subsornance=subsornance.包括(患者:[:疫苗接种,:支持者])。按slug查找(参数[:id])


请注意,
patient:
:patient=>
相同,后者是散列的关键保护项。所以ruby期望下一个值是散列的一半,而不是一个列表。我将其更改为数组(不确定这是否是您的意思)

这不是有效的ruby语法。你可能是说:

@subsornance=subsornance.包括(患者:[:疫苗接种,:支持者])。按slug查找(参数[:id])


请注意,
patient:
:patient=>
相同,后者是散列的关键保护项。所以ruby期望下一个值是散列的一半,而不是一个列表。我将其更改为数组(不确定这是否是您的意思)

这不是有效的ruby语法。你可能是说:

@subsornance=subsornance.包括(患者:[:疫苗接种,:支持者])。按slug查找(参数[:id])


请注意,
patient:
:patient=>
相同,后者是散列的关键保护项。所以ruby期望下一个值是散列的一半,而不是一个列表。我将其更改为数组(不确定这是否是您的意思)

这不是有效的ruby语法。你可能是说:

@subsornance=subsornance.包括(患者:[:疫苗接种,:支持者])。按slug查找(参数[:id])


请注意,
patient:
:patient=>
相同,后者是散列的关键保护项。所以ruby期望下一个值是散列的一半,而不是一个列表。我将其更改为数组(不确定这是否是您的意思)

因为如果您依赖Ruby语法糖来避免自己编写
{}
,则哈希参数必须是最后一个参数。

因为如果您依赖Ruby语法糖来避免编写
{},则哈希参数必须是最后一个参数
你自己。

因为如果你依靠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])
第一次有两个参数,第一个是散列,第二个是值

在第二个示例中,仍然有两个参数,第一个是值,第二个是隐式散列。在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 = Sponsorship.includes({ patient: :vaccinations }, :backer)
                      .find_by_slug(params[:id])

@sponsorship = Sponsorship.includes(:backer, patient: :vaccinations)
                      .find_by_slug(params[:id])
第一次有两个参数,第一个是散列,第二个是值

在第二个示例中,仍然有两个参数,第一个是值,第二个是隐式散列。在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 = Sponsorship.includes({ patient: :vaccinations }, :backer)
                      .find_by_slug(params[:id])

@sponsorship = Sponsorship.includes(:backer, patient: :vaccinations)
                      .find_by_slug(params[:id])
第一次有两个参数,第一个是散列,第二个是值

在第二个示例中,仍然有两个参数,第一个是值,第二个是隐式散列。在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 = Sponsorship.includes({ patient: :vaccinations }, :backer)
                      .find_by_slug(params[:id])

@sponsorship = Sponsorship.includes(:backer, patient: :vaccinations)
                      .find_by_slug(params[:id])
第一次有两个参数,第一个是散列,第二个是值

在第二个示例中,仍然有两个参数,第一个是值,第二个是隐式散列。在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}
语法。

你的问题是什么?他有语法错误并想知道原因。你的问题是什么?他有语法错误并想知道原因。你的问题是什么?他有语法错误并想知道原因。你的问题是什么?他有语法错误并想知道原因。这和我的意思不完全一样。在你的建议中,你暗示赞助有一个病人,病人有许多疫苗接种,病人有一个支持者,但事实并非如此。实际上,赞助只有一个病人,病人有很多疫苗接种,赞助只有一个支持者。这和我的意思不完全一样。在您的建议中,您暗示赞助有一名患者,患者有许多疫苗接种,以及