我在我的Child的模型profile.rb
中定义了一个范围方法,如下所示
scope :fees_to, -> (fees_to) { where("fees_to <= ?", "#{fees_to}") }
在tutor.rb
的父母中有
has_one :profile, dependent: :destroy
现在在rails控制台中,我可以Profile.all.fees_to(10)
为例,其有效。但是,如何通过父fees_to
调用Tutor
方法?
现在基本上我可以在索引视图中过滤我的profiles
了。但我想做的是根据孩子的值过滤tutor
索引视图。
非常感谢所有的帮助和建议!谢谢
答案 0 :(得分:0)
这对于has_one
毫无意义。你不能“拥有一个”并仍然适用范围。范围适用于许多记录,应用其他条件并缩小结果集范围,而不是特定记录。
您有效地尝试将where(fees_to < ?)
条件添加到特定记录,这显然毫无意义。
如果您想通过关联使用范围,则需要has_many
。
答案 1 :(得分:0)
在master
中:
您可以创建如下函数:
profile.rb
然后在rails console中:
def fees_to n
Profile.fees_to(n) # your scope is called here
end
它就像一个过滤器。如果个人资料的费用为&gt; tutor = Tutor.first
tutor.profile.fees_to(10)
,您将获得n
(数组为空)
<强>已更新强>
[]
可能你想要那样的循环:
bad => @tutor = Tutor.all
good => @tutor = Tutor.includes(:profile).all # with eager loading, avoid n+1 query.
答案 2 :(得分:0)
我在tutor.rb
def self.fees_search(n)
@profile = Profile.fees_to(n)
if @profile.empty?
return Tutor.none
else
@profile.each do |y|
y.tutor
end
end
end
不确定它是否笨重或是否存在冗余,但它在rails控制台中运行得非常好。我可以做Tutor.fees_search(10)
并相应地呈现所有相应的导师。
干杯