![](/img/trans.png)
[英]undefined method `each' for nil:NilClass for display on application.html.erb
[英]Getting undefined method `each' for nil:NilClass in my index.html.erb
当我在模型中使用Tire实现弹性搜索功能时,我在index.html.erb中得到了nil:NilClass的未定义方法“ each”。 可能的原因和解决方案是什么?
index.html.erb:
<div class="page-header">
<h1>Friends</h1>
<%= form_tag user_friendships_path, method: :get do %>
<p>
<%= text_field_tag :query, params[:query] %>
<%= submit_tag "Search", name: nil %>
</p>
<% end %>
</div>
<div>
<strong>Friend list:</strong>
<%= link_to 'All', user_friendships_path %> |
<%= link_to 'Blocked', user_friendships_path(list: 'Blocked') %> |
<%= link_to 'Requested', user_friendships_path(list: 'Requested') %> |
<%= link_to 'Accepted', user_friendships_path(list: 'Accepted') %> |
<%= link_to 'Pending', user_friendships_path(list: 'Pending') %>
</div>
<% @user_friendships.each do |friendship| %>
<% friend = friendship.friend %>
<div id="<%= dom_id(friendship) %>" class="friend row">
<div class="span1">
<%= link_to image_tag(friend.gravatar_url), profile_path(friend) %>
</div>
<div class="span7">
<strong><%= friend.full_name %></strong><br />
<% if friendship.pending? %>
<em>Friendship is pending.</em> <%= link_to "Delete request", edit_user_friendship_path(id: friend.user_name) %>.
<% end %>
<% if friendship.requested? %>
<em>Friendship requested.</em> <%= link_to "Accept Friendship", edit_user_friendship_path(id: friend.user_name) %>.
<% end %>
<% if friendship.accepted? %>
<em>Friendship started <%= friendship.updated_at %>.</em> <%= link_to "Update friendship", edit_user_friendship_path(id: friend.user_name) %>.
<% end %>
<% if current_user.blocked_friends.include?(friend) %>
<%= form_for friendship, url: user_friendship_path(friendship), method: :delete do |form| %>
<%= submit_tag "Unblock", class: 'btn btn-danger' %>
<% end %>
<%end%>
</div>
</div>
<% end %>
模型(仅所需的代码)-> user_friendship.rb:
class UserFriendship < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
def self.search(params)
tire.search(load: true) do
query { string params[:query] } if params[:query].present?
end
end
attr_accessible :user, :friend, :user_id, :friend_id, :state
belongs_to :user
控制器-> user_friendship_controller.rb
class UserFriendshipsController < ApplicationController
before_filter :authenticate_user!
respond_to :html, :json
def index
@user_friendships = current_user.user_friendships.all.search(params)
case params[:list]
when nil
@user_friendships = current_user.pending_user_friendships.all + current_user.accepted_user_friendships.all + current_user.requested_user_friendships.all
when 'Blocked'
@user_friendships = current_user.blocked_user_friendships.all
when 'Pending'
@user_friendships = current_user.pending_user_friendships.all
when 'Accepted'
@user_friendships = current_user.accepted_user_friendships.all
when 'Requested'
@user_friendships = current_user.requested_user_friendships.all
end
respond_with @user_friendships
end
如果您使搜索方法返回一个空数组[]
而不是nil
一切都很好。
它可能看起来像
def self.search(params)
tire.search(load: true) do
query { string params[:query] } if params[:query].present?
end || []
end
该错误告诉您@user_friendships在发送每条消息时为nil。 大概在params [:list]案例语句中如何分配@user_friendships会发生问题。 您需要通过对此params [:list]案例语句进行故障诊断来弄清楚为什么在呈现视图时@user_friendships为零。 我建议调试应用程序或记录params [:list] / @user_friendships的值,以查看正在调用哪种情况,然后弄清楚为什么调用该情况会导致nil值。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.