Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 ActiveRecord模型生命周期_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails ActiveRecord模型生命周期

Ruby on rails ActiveRecord模型生命周期,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,Rails ActiveRecord模型可以包含许多方法调用,包括我使用的以下方法调用: class Food < ActiveRecord::Base translates :name belongs_to :group, class_name: 'FoodGroup', foreign_key: :food_group_id has_many :components, through: :food_components has_and_belongs_to_many :

Rails ActiveRecord模型可以包含许多方法调用,包括我使用的以下方法调用:

class Food < ActiveRecord::Base
  translates :name
  belongs_to :group, class_name: 'FoodGroup', foreign_key: :food_group_id
  has_many :components, through: :food_components
  has_and_belongs_to_many :tags, join_table: 'tagged_foods', class_name: 'FoodTag'
  scope :dishes, ->{where is_dish: true}
  include PgSearch
  pg_search_scope :whose_name_starts_with_en, :against => :name_en,
  ...
end
class食品{u dish:true}
包括PgSearch
pg_search_scope:which_name_以_en开头,:country=>:name_en,
...
结束
所以我的问题是——这些代码什么时候执行?每次创建模型实例时?还是只有一次

我有这个问题是因为我需要将
当前用户.id
传递到
pg\u search\u scope
,并且不确定假设每个模型都有一个正确的用户id有多安全。

所有这些“东西”基本上为您的模型添加了额外的方法。乙二醇

belongs_to :group, class_name: 'FoodGroup', foreign_key: :food_group_id
属于\u to
是“宏”的一个示例,它向模型中添加了大量方法

您可以自己编写所有这些方法,但输入“属于”可以省去您的麻烦

在加载类时执行,并“混合”新方法。因为它们是从其他模块中拉入的,所以您可以在模型定义中覆盖它们中的任何一个

当类被加载时,您拥有的所有其他示例也会被计算

正如您所怀疑的,当类被加载时,命名的作用域是“固定的”,因此您不能向它传递参数。但是,有一种方法允许命名范围使用“lambda”获取参数,它基本上是一个代码块。(有关更多信息,请参阅)

所有这些“东西”基本上会在模型中添加额外的方法。乙二醇

belongs_to :group, class_name: 'FoodGroup', foreign_key: :food_group_id
属于\u to
是“宏”的一个示例,它向模型中添加了大量方法

您可以自己编写所有这些方法,但输入“属于”可以省去您的麻烦

在加载类时执行,并“混合”新方法。因为它们是从其他模块中拉入的,所以您可以在模型定义中覆盖它们中的任何一个

当类被加载时,您拥有的所有其他示例也会被计算

正如您所怀疑的,当类被加载时,命名的作用域是“固定的”,因此您不能向它传递参数。但是,有一种方法允许命名范围使用“lambda”获取参数,它基本上是一个代码块。(有关更多信息,请参阅)

所有这些“东西”基本上会在模型中添加额外的方法。乙二醇

belongs_to :group, class_name: 'FoodGroup', foreign_key: :food_group_id
属于\u to
是“宏”的一个示例,它向模型中添加了大量方法

您可以自己编写所有这些方法,但输入“属于”可以省去您的麻烦

在加载类时执行,并“混合”新方法。因为它们是从其他模块中拉入的,所以您可以在模型定义中覆盖它们中的任何一个

当类被加载时,您拥有的所有其他示例也会被计算

正如您所怀疑的,当类被加载时,命名的作用域是“固定的”,因此您不能向它传递参数。但是,有一种方法允许命名范围使用“lambda”获取参数,它基本上是一个代码块。(有关更多信息,请参阅)

所有这些“东西”基本上会在模型中添加额外的方法。乙二醇

belongs_to :group, class_name: 'FoodGroup', foreign_key: :food_group_id
属于\u to
是“宏”的一个示例,它向模型中添加了大量方法

您可以自己编写所有这些方法,但输入“属于”可以省去您的麻烦

在加载类时执行,并“混合”新方法。因为它们是从其他模块中拉入的,所以您可以在模型定义中覆盖它们中的任何一个

当类被加载时,您拥有的所有其他示例也会被计算

正如您所怀疑的,当类被加载时,命名的作用域是“固定的”,因此您不能向它传递参数。但是,有一种方法允许命名范围使用“lambda”获取参数,它基本上是一个代码块。(有关更多信息,请参阅)


除了@Max Williams回答:

也可以写成

scope :dishes, ->(user) {where is_dish: true}

这是您的初始代码中使用的格式。

除了@Max Williams answer:

也可以写成

scope :dishes, ->(user) {where is_dish: true}

这是您的初始代码中使用的格式。

除了@Max Williams answer:

也可以写成

scope :dishes, ->(user) {where is_dish: true}

这是您的初始代码中使用的格式。

除了@Max Williams answer:

也可以写成

scope :dishes, ->(user) {where is_dish: true}

这是初始代码中使用的表单。

lambda!太好了,这就是我错过的,谢谢。只要想办法把它传给pg_scopelambda!太好了,这就是我错过的,谢谢。只要想办法把它传给pg_scopelambda!太好了,这就是我错过的,谢谢。只要想办法把它传给pg_scopelambda!太好了,这就是我错过的,谢谢。只需找到一种方法将其传递给pg_scope谢谢,我真的需要将用户id传递给
pg_search_scope
而不是常规的。它有一个
ranking_by
选项,您可以在其中指定自己的排名sql,我必须将特定于用户的sql放在其中。谢谢@Martin,我以前没有使用过最新的语法。谢谢,我真的需要将用户id传递给
pg_search_scope
而不是常规的。它有一个
ranking_by
选项,您可以在其中指定自己的排名sql,我必须将特定于用户的sql放在其中。谢谢@Martin,我以前没有使用过最新的语法。谢谢,我真的需要将用户id传递给
pg_search_scope
而不是常规的。它有一个
ranking_by
选项,您可以在其中指定自己的排名sql,我必须将特定于用户的sql放在其中。谢谢@Martin,我以前没有使用过最新的语法。谢谢,我真的需要将用户id传递给
pg_search_scope
而不是常规的。它有一个按