Ruby on rails Rails回调不使用self
Rails指南中的代码段:Ruby on rails Rails回调不使用self,ruby-on-rails,ruby,self,Ruby On Rails,Ruby,Self,Rails指南中的代码段: class User < ActiveRecord::Base before_validation :normalize_name, on: :create protected def normalize_name self.name = self.name.downcase.titleize end end 可以,但这可能会使代码不可读或导致歧义。 在两侧使用self.na
class User < ActiveRecord::Base
before_validation :normalize_name, on: :create
protected
def normalize_name
self.name = self.name.downcase.titleize
end
end
可以,但这可能会使代码不可读或导致歧义。 在两侧使用
self.name
更为清晰,这样每个阅读代码的人都知道会发生什么
我用IRB做了一个小例子来说明发生了什么:
2.1.5 :014 > class User
2.1.5 :015?> attr_accessor :name
2.1.5 :016?> def normalize_name
2.1.5 :017?> self.name = name.downcase
2.1.5 :018?> end
2.1.5 :019?> end
=> :normalize_name
2.1.5 :020 > u = User.new
=> #<User:0x007ff81282a070>
2.1.5 :021 > u.name = "NAME"
=> "NAME"
2.1.5 :022 > u.normalize_name
=> "name"
2.1.5 :023 >
2.1.5:014>类用户
2.1.5:015?>属性访问器:名称
2.1.5:016?>def规范化_名称
2.1.5:017?>self.name=name.downcase
2.1.5:018?>结束
2.1.5:019?>结束
=>:规范化\u名称
2.1.5:020>u=User.new
=> #
2.1.5:021>u.name=“name”
=>“名称”
2.1.5:022>u.normalize_名称
=>“名称”
2.1.5 :023 >
所以,是的,你能做到。
但是使用
self.name
更简洁,因此没有歧义。您可以,但它可能会使代码不可读或导致歧义。
在两侧使用self.name
更为清晰,这样每个阅读代码的人都知道会发生什么
我用IRB做了一个小例子来说明发生了什么:
2.1.5 :014 > class User
2.1.5 :015?> attr_accessor :name
2.1.5 :016?> def normalize_name
2.1.5 :017?> self.name = name.downcase
2.1.5 :018?> end
2.1.5 :019?> end
=> :normalize_name
2.1.5 :020 > u = User.new
=> #<User:0x007ff81282a070>
2.1.5 :021 > u.name = "NAME"
=> "NAME"
2.1.5 :022 > u.normalize_name
=> "name"
2.1.5 :023 >
2.1.5:014>类用户
2.1.5:015?>属性访问器:名称
2.1.5:016?>def规范化_名称
2.1.5:017?>self.name=name.downcase
2.1.5:018?>结束
2.1.5:019?>结束
=>:规范化\u名称
2.1.5:020>u=User.new
=> #
2.1.5:021>u.name=“name”
=>“名称”
2.1.5:022>u.normalize_名称
=>“名称”
2.1.5 :023 >
所以,是的,你能做到。
但是使用
self.name
更简洁,因此没有歧义。您可以,但它可能会使代码不可读或导致歧义。
在两侧使用self.name
更为清晰,这样每个阅读代码的人都知道会发生什么
我用IRB做了一个小例子来说明发生了什么:
2.1.5 :014 > class User
2.1.5 :015?> attr_accessor :name
2.1.5 :016?> def normalize_name
2.1.5 :017?> self.name = name.downcase
2.1.5 :018?> end
2.1.5 :019?> end
=> :normalize_name
2.1.5 :020 > u = User.new
=> #<User:0x007ff81282a070>
2.1.5 :021 > u.name = "NAME"
=> "NAME"
2.1.5 :022 > u.normalize_name
=> "name"
2.1.5 :023 >
2.1.5:014>类用户
2.1.5:015?>属性访问器:名称
2.1.5:016?>def规范化_名称
2.1.5:017?>self.name=name.downcase
2.1.5:018?>结束
2.1.5:019?>结束
=>:规范化\u名称
2.1.5:020>u=User.new
=> #
2.1.5:021>u.name=“name”
=>“名称”
2.1.5:022>u.normalize_名称
=>“名称”
2.1.5 :023 >
所以,是的,你能做到。
但是使用
self.name
更简洁,因此没有歧义。您可以,但它可能会使代码不可读或导致歧义。
在两侧使用self.name
更为清晰,这样每个阅读代码的人都知道会发生什么
我用IRB做了一个小例子来说明发生了什么:
2.1.5 :014 > class User
2.1.5 :015?> attr_accessor :name
2.1.5 :016?> def normalize_name
2.1.5 :017?> self.name = name.downcase
2.1.5 :018?> end
2.1.5 :019?> end
=> :normalize_name
2.1.5 :020 > u = User.new
=> #<User:0x007ff81282a070>
2.1.5 :021 > u.name = "NAME"
=> "NAME"
2.1.5 :022 > u.normalize_name
=> "name"
2.1.5 :023 >
2.1.5:014>类用户
2.1.5:015?>属性访问器:名称
2.1.5:016?>def规范化_名称
2.1.5:017?>self.name=name.downcase
2.1.5:018?>结束
2.1.5:019?>结束
=>:规范化\u名称
2.1.5:020>u=User.new
=> #
2.1.5:021>u.name=“name”
=>“名称”
2.1.5:022>u.normalize_名称
=>“名称”
2.1.5 :023 >
所以,是的,你能做到。
但是使用
self.name
更简洁,因此没有歧义。只有在使用写访问器时才使用self
似乎是一种社区惯例
# writer
self.name=
# reader
name
在中定义:
指南中的示例:
# bad
def ready?
if self.last_reviewed_at > self.last_updated_at
self.worker.update(self.content, self.options)
self.status = :in_progress
end
self.status == :verified
end
# good
def ready?
if last_reviewed_at > last_updated_at
worker.update(content, options)
self.status = :in_progress
end
status == :verified
end
只有在使用写访问器时才使用
self
,这似乎是一种社区惯例
# writer
self.name=
# reader
name
在中定义:
指南中的示例:
# bad
def ready?
if self.last_reviewed_at > self.last_updated_at
self.worker.update(self.content, self.options)
self.status = :in_progress
end
self.status == :verified
end
# good
def ready?
if last_reviewed_at > last_updated_at
worker.update(content, options)
self.status = :in_progress
end
status == :verified
end
只有在使用写访问器时才使用
self
,这似乎是一种社区惯例
# writer
self.name=
# reader
name
在中定义:
指南中的示例:
# bad
def ready?
if self.last_reviewed_at > self.last_updated_at
self.worker.update(self.content, self.options)
self.status = :in_progress
end
self.status == :verified
end
# good
def ready?
if last_reviewed_at > last_updated_at
worker.update(content, options)
self.status = :in_progress
end
status == :verified
end
只有在使用写访问器时才使用
self
,这似乎是一种社区惯例
# writer
self.name=
# reader
name
在中定义:
指南中的示例:
# bad
def ready?
if self.last_reviewed_at > self.last_updated_at
self.worker.update(self.content, self.options)
self.status = :in_progress
end
self.status == :verified
end
# good
def ready?
if last_reviewed_at > last_updated_at
worker.update(content, options)
self.status = :in_progress
end
status == :verified
end
大胆尝试吧!:-)“为什么我们在语句的右侧使用self.name?”您告诉我们。你不必这么做,那你为什么这么做?@meagar,这段代码来自Rails指南。大胆尝试吧!:-)“为什么我们在语句的右侧使用self.name?”您告诉我们。你不必这么做,那你为什么这么做?@meagar,这段代码来自Rails指南。大胆尝试吧!:-)“为什么我们在语句的右侧使用self.name?”您告诉我们。你不必这么做,那你为什么这么做?@meagar,这段代码来自Rails指南。大胆尝试吧!:-)“为什么我们在语句的右侧使用self.name?”您告诉我们。你不必这么做,那你为什么这么做?@meagar,此代码段来自Rails指南。刚刚将我的拉入请求合并到Rails中,我删除了自我:)谢谢。刚刚将我的拉入请求合并到Rails中,我删除了自我:)谢谢。刚刚将我的拉入请求合并到Rails中,我删除了自我:)谢谢。刚刚将我的拉入请求合并到Rails中,我删除了自我:)谢谢自我:)谢谢你。