所以在我的tutors_controller.rb
这是我的索引动作
def index
@tutor = Tutor.all
@tutor = @tutor.fees_search(params[:fees_search]) if params[:fees_search].present?
end
在我的index.html.erb
这是视图
<div class='container'>
<%= form_tag(tutors_path, method: :get) do %>
<%= label_tag 'fees_search', 'Max Fees' %>
<%= select_tag 'fees_search', options_for_select((10..50).step(10)) %>
<%= submit_tag 'Filter' %>
<% end %>
<% @tutor.each do |tutor| %>
<% unless tutor.admin? %>
<div class='row' id='tutor-listing'>
<div class='col-xs-4'>
<%= image_tag(tutor.profile.avatar.url, :class => "img-rounded" ) if tutor.profile.avatar? %>
</div>
<div class='col-xs-8'>
<h3><%= link_to tutor.full_name, tutor_path(tutor) %></h3>
<% unless tutor.subjects.nil? %>
<% tutor.subjects.each do |subs| %>
<span class='badge'id='tutor-listing-badge'>
<%= link_to subs.name, subject_path(subs) %>
</span>
<% end %>
<% end %>
<% unless current_tutor %>
<%= button_to "Shortlist Tutor", add_to_cart_path(tutor.id), :method => :post %>
<% end %>
</div>
</div>
<% end %>
<% end %>
</div>
所以我理解,当索引视图首次呈现时,@tutor
只是Tutor.all
,因此它可以完美呈现每个个体导师。
尝试过滤后,我开始收到错误。确切的错误为NoMethodError in Tutors#index
,突出显示的行为<% unless tutor.admin? %>
profile.rb
型号
class Profile < ActiveRecord::Base
belongs_to :tutor
scope :fees_to, -> (fees_to) { where("fees_to <= ?", "#{fees_to}") }
end
tutor.rb
型号
class Tutor < ActiveRecord::Base
has_one :profile, dependent: :destroy
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
end
我知道现在我的@tutor
实例变量明显改变了。但是我如何解决这个问题呢?我应该渲染部分吗?显然我在我的控制器中的索引操作可能更好&#34;此外,我现在对我应该做的事情感到很困惑。
非常感谢任何建议!谢谢!
答案 0 :(得分:1)
@profile.each do |y|
y.tutor
end
似乎是一个问题。所有其他结果都是Tutor.something
范围,而这只会返回最后一位导师。将each
更改为map
以获得Tutors
的数组。