ruby-on-rails – 对方法定义感到困惑:def req =(request)

我在Ryan Bates的railscast网站上找到了这个,但不知道它是如何工作的.
#models/comment.rb
def req=(request)
    self.user_ip    = request.remote_ip
    self.user_agent = request.env['HTTP_USER_AGENT']
    self.referrer   = request.env['HTTP_REFERER']
end

#blogs_controller.rb
def create
    @blog = Blog.new(params[:blog])
    @blog.req = request
    if @blog.save
        ...

我看到他正在保存用户ip,用户代理和引用,但我对req =(request)行感到困惑.

解决方法

要在 Karmen Blake’s answerKandadaBoggu’s answer上构建,第一个方法定义会在执行此行时执行:
@blog.req = request

这就像这样做:

@blog.user_ip    = request.remote_ip
@blog.user_agent = request.env['HTTP_USER_AGENT']
@blog.referrer   = request.env['HTTP_REFERER']

它基本上设置了一个捷径.看起来你只是在分配一个变量的值,但实际上你正在调用一个名为req =的方法,而请求对象是第一个(也是唯一的)参数.

这是有效的,因为在Ruby中,函数可以使用或不使用括号.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...