【问题标题】:Access the scope in a class method访问类方法中的范围
【发布时间】:2018-05-29 10:07:47
【问题描述】:

我有一个模型User,它有一个关系tags

class User < ActiveRecord::Base #id, name, email, ...
  has_many :tags
end

class Tag < ActiveRecord::Base #id, name, ...
  def self.add_tag(tag)
    self.create!({user_id:user.id, tag: tag})
  end
end

User.tags.add_tag("abc")

类方法add_tag如何知道被引用的关系?

【问题讨论】:

  • 这里self.create!({user_id:user.id, tag: tag})user 未定义
  • 这个User.tags.add_tag("abc")会导致用户类的未定义方法标签错误
  • 您可以简单地使用user.tags.create!(tag: 'abc'),而不是使逻辑如此复杂。除非您在其中进行大量计算/分配,否则您不需要单独的方法。

标签: ruby-on-rails activerecord


【解决方案1】:

我显然,在类方法中调用 create 将适当地设置范围

class User < ActiveRecord::Base #id, name, email, ...
  has_many :tags
end

class Tag < ActiveRecord::Base #id, name, ...
  def self.add_tag(tag)
    self.create!({ tag: tag})
  end
end

user.tags.add_tag("abc")

这样就可以了

【讨论】:

  • 这个User.tags.add_tag("abc")会导致用户类的未定义方法标签错误
猜你喜欢
  • 2021-12-04
  • 2017-09-24
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
相关资源
最近更新 更多