UsersController#show中的NoMethodError

时间:2013-07-17 23:13:57

标签: ruby-on-rails ruby-on-rails-3

当我访问未登录应用的用户个人资料页面时,我的应用中出现以下错误(我正在使用Devise):

UsersController#show中的NoMethodError nil的未定义方法`connections':NilClass

app / controllers / users_controller.rb:19:在'show'

当我登录时,错误消失了。我知道为什么会失败。我只是需要帮助来提出正确的解决方案。

我的用户控制器中此行发生错误:

def show
@connection = current_user.connections.build(user_id: current_user, otheruser_id: @user)
end

对于登录到应用程序的用户,会显示一个连接表单(简单地说,会出现一个按钮,询问您是否希望与此人以朋友身份联系)。但是,我正在检查用户是否在表单前使用<% if user_signed_in? %>登录了用户视图“show”页面。

以下是该视图中的相关代码:

 <%= render 'connect_form' if user_signed_in? %>

connect_form

<% unless current_user == @user %>
  <% if @contact.present? && user_signed_in? %>
      <%= @user.first_name %> is your  <%= @contact.description %> (<%= link_to "edit contact", edit_connection_path(:id => @contact.id, :user => @user) %>)<br \>
  <% else %>
    <% if user_signed_in? %>How do you know <%= @user.first_name %>? (<%= link_to "edit contact", new_connection_path(:user => @user) %> )
  <% else %> 
<% end %><br \>
<% end %>
<% end %>

connection_form(创建一个新的)

<% if user_signed_in? %>
How do you know <%= @user.first_name %>?
  <%= form_for(@connection) do |f| %>
  <%= f.collection_select :description, Connection::CONNECTIONTYPE, :to_s, :to_s, :include_blank => true %>
  <%= f.hidden_field(:otheruser_id, :value => @user.id) %>
  <%= f.submit "Save", class: "btn btn-primary btn-small" %>
  <% else %>
<% end %>

为什么我的应用尝试加载一个nil数组`@connections,即使我检查了user_signed_in?非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

我要做的第一件事就是检查一下,如果当前用户存在,只建立连接。

def show
  @connection = current_user.connections.build(user_id: current_user, otheruser_id: @user) if current_user
end

要注意的主要事项是:行尾的if current_user

答案 1 :(得分:0)

来自错误消息

undefined method `connections' for nil:NilClass

current_user为零,快速测试是

def show @connection = User.new.connections.build(user_id: current_user, otheruser_id: mock_user_id) end

对于您的情况,也许您没有将登录用户存储在某个地方