2017-02-24 63 views
1

我跑进创建此代码:什么是类名:: Rails中

run Athlete::Create do |op| 
    return redirect_to op.model, notice: 'Athlete was successfully created.' 
end 

我已经习惯了标准ClassName.create(params)选项。

任何想法是什么ClassName::Create do |op|,或甚至被称为?

+0

你的应用中有'services'文件夹吗?它可能是放在'Athlete'命名空间下的'Create'服务吗? –

+0

是安装的宝石开拓者? – Sean

+0

Hey Slava我没有服务文件夹。 肖恩我已经安装了开拓者。从下面的答案看来,这是我的问题。 – TallOrderDev

回答

1

你所看到的是一个叫Trailblazer宝石从他们的github上指出:

开拓者的Ruby框架提供了新的高层次的抽象。它轻轻地执行封装,一个直观的代码结构,并为您提供面向对象的体系结构。

+0

谢谢,你是对的。只有这些少量的信息是超级有用的!请随时提出问题,以便其他人可以更轻松地进行Google搜索。现在我会为这个问题添加更多内容,以便我有一个答案。 – TallOrderDev

+0

干杯。如果您满意,请随时标记此正确答案。 – Sean

1

任何想法的ClassName::Create do |op|是,或者甚至被称为?

这只是一个普通的消息发送块参数。

Ruby允许您使用::进行消息发送。 IOW,你所问的行与

ClassName.Create do |op| 

然而,这实际上不是代码。 是代码如下所示:

run Athlete::Create do |op| 
    return redirect_to op.model, notice: 'Athlete was successfully created.' 
end 

红宝石让你离开了括号在消息中发送的参数列表,所以这相当于

run(Athlete::Create) do |op| 
    return redirect_to op.model, notice: 'Athlete was successfully created.' 
end 

它发送消息runself,通过表达式Athlete::Create和块作为参数。

+0

我认为它是'run(Classname :: Create){| op |实际上。 – fylooi

+0

感谢您解决这个问题。看起来Trailblazer是所有这些的原因,这首先解释了这个代码的用法!非常感谢你解释块的问题。很高兴看到引擎盖下发生了什么!随时upvote。 ;)我给你一个upvote,只是低到显示:( – TallOrderDev