sen*_*hil 6 ruby-on-rails railscasts
我在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
...
Run Code Online (Sandbox Code Playgroud)
我看到他正在保存用户ip,用户代理和推荐人,但我对该req=(request)行感到困惑.
该行定义了一个名为的方法req=.最后的=角色使它成为一种赋值方法.
这是一个常规的setter方法:
def foo(para1)
@foo = para1
end
Run Code Online (Sandbox Code Playgroud)
setter方法可以重写为赋值方法,如下所示:
def foo=(para1)
@foo = para1
end
Run Code Online (Sandbox Code Playgroud)
两个setter方法之间的区别在于调用语法.
作业设定者:
a.foo=("bar") #valid syntax
a.foo= ("bar") #valid syntax
a.foo = ("bar") #valid syntax
a.foo= "bar" #valid syntax
a.foo = "bar" #valid syntax
Run Code Online (Sandbox Code Playgroud)
常规二传手:
a.foo("bar") #valid syntax
a.foo ("bar") #valid syntax
a.fo o ("bar") #invalid syntax
Run Code Online (Sandbox Code Playgroud)
为了建立Karmen Blake的答案和KandadaBoggu的答案,第一个方法定义在执行此行时就这样做了:
@blog.req = request
Run Code Online (Sandbox Code Playgroud)
这就像这样做:
@blog.user_ip = request.remote_ip
@blog.user_agent = request.env['HTTP_USER_AGENT']
@blog.referrer = request.env['HTTP_REFERER']
Run Code Online (Sandbox Code Playgroud)
它基本上设置了一个捷径.看起来您只是分配变量的值,但实际上您正在调用一个名为的方法req=,该request对象是第一个(也是唯一的)参数.
这是有效的,因为在Ruby中,函数可以使用或不使用括号.
| 归档时间: |
|
| 查看次数: |
449 次 |
| 最近记录: |