Ruby on rails 从另一个模型调用Rails模型

Ruby on rails 从另一个模型调用Rails模型,ruby-on-rails,ruby-on-rails-3,rspec,factory-bot,Ruby On Rails,Ruby On Rails 3,Rspec,Factory Bot,从另一个模型调用Rails模型是否被认为是最佳实践?(代码如下): 我发现执行RSpec/FactoryGirl测试这样做有点尴尬,而不是在控制器内执行这些操作。我可以建议一种不同的方法吗?假设您的模型设置如下: class Friend < ActiveRecord::Base belongs_to :user scope :pending, -> { where(approved: false) } end class User < ActiveRecord::

从另一个模型调用Rails模型是否被认为是最佳实践?(代码如下):


我发现执行RSpec/FactoryGirl测试这样做有点尴尬,而不是在控制器内执行这些操作。

我可以建议一种不同的方法吗?假设您的模型设置如下:

class Friend < ActiveRecord::Base
  belongs_to :user

  scope :pending, -> { where(approved: false) }
end

class User < ActiveRecord::Base
  has_many :friends

  def pending_requests
    friends.pending
  end
end
class-Friend{where(approved:false)}
结束
类用户

因此,您创建了一个名为pending on friend的作用域。然后你可以在你的朋友关系上使用这个范围。我发现这是一种更标准的方法。

我想应该是自我朋友,不是吗?不过,我的示例没有正确说明,我更多考虑的是一个
add\u friend
方法,该方法将在
self.friends.new(…)
上创建一个新记录,除非您希望friends方法和名为friends的局部变量之间发生冲突。是的,您可以这样做。在您的
add\u friend
方法中,您可以执行
self.friends.pending.create(…)
。这将创建一个id设置正确的待定朋友。是的,这就是我现在使用的。但说到测试,那简直是地狱。“未定义的表”错误等等。。谢谢你的反馈!这不应该给测试增加任何复杂性。也许考虑更新您的问题与您正在接收的具体错误。我们还需要看看测试/工厂。你一定还有别的事。
class Friend < ActiveRecord::Base
  belongs_to :user

  scope :pending, -> { where(approved: false) }
end

class User < ActiveRecord::Base
  has_many :friends

  def pending_requests
    friends.pending
  end
end