Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails回调不使用self_Ruby On Rails_Ruby_Self - Fatal编程技术网

Ruby on rails Rails回调不使用self

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

Rails指南中的代码段:

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中,我删除了自我:)谢谢自我:)谢谢你。