索引视图中的实例变量出错

时间:2016-10-05 11:05:01

标签: ruby-on-rails

所以在我的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? %>

enter image description here

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;此外,我现在对我应该做的事情感到很困惑。

非常感谢任何建议!谢谢!

1 个答案:

答案 0 :(得分:1)

@profile.each do |y|
  y.tutor
end

似乎是一个问题。所有其他结果都是Tutor.something范围,而这只会返回最后一位导师。将each更改为map以获得Tutors的数组。