Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我在用户索引错误(RubyonRails)中遇到了命名错误_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 为什么我在用户索引错误(RubyonRails)中遇到了命名错误

Ruby on rails 为什么我在用户索引错误(RubyonRails)中遇到了命名错误,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我看了很多其他的线程,在过去的几个小时里都在看,但我还是没能弄明白 我正在使用另一个视图页面中的同一行代码 以下是错误: app/views/users/_user.html.erb其中第4行出现: undefined method `microposts' for nil:NilClass 这是来自Rubytutorial演示应用程序,如果您熟悉的话。这段代码曾在views\users\show.html.erb中使用过,我试图看看它是否能在views\users\u user.html.e

我看了很多其他的线程,在过去的几个小时里都在看,但我还是没能弄明白

我正在使用另一个视图页面中的同一行代码

以下是错误:

app/views/users/_user.html.erb
其中第4行出现:

undefined method `microposts' for nil:NilClass
这是来自Rubytutorial演示应用程序,如果您熟悉的话。这段代码曾在
views\users\show.html.erb
中使用过,我试图看看它是否能在
views\users\u user.html.erb
上运行,但我发现了错误

我正在重用的代码是:

<%= @user.microposts.count %>

下面是调用分部函数的完整视图(_user.html.erb)

<li>
  <%= gravatar_for user, size: 52 %>
  <%= link_to user.name, user %>
<%- if @user %>
  <%= @user.microposts.count %>
<%- else %>
  THIS IS THE ERROR, THERE IS NO USER ON @user
<%- end %>
 <% if current_user.admin? && !current_user?(user) %>
    | <%= link_to "delete", user, method: :delete, confirm: "You sure?" %>
  <% end %>
</li>
  • 这就是错误所在,@USER上没有用户 |
  • 导致此错误的原因是\@USER上没有用户。这意味着根据rorra的评论,\@user不存在,那么我应该在哪里解决这个问题

    class UsersController < ApplicationController
      before_filter :signed_in_user,
                    only: [:index, :edit, :update, :destroy, :following, :followers]
      before_filter :correct_user,   only: [:edit, :update]
      before_filter :admin_user,     only: :destroy
    
    
      def index
    
        @users = User.paginate(page: params[:page])
      end
    
    
      def show
        @user = User.find(params[:id])
        @microposts = @user.microposts.paginate(page: params[:page])
      end
    
    
    
      def new
        @user = User.new
      end
    
      def create
        @user = User.new(params[:user])
        if @user.save
          sign_in @user
          flash[:success] = "Welcome to Sample App!"
          redirect_to root_url
        else
          render 'new'
        end
      end
    
      def edit
      end
    
      def update
        if @user.update_attributes(params[:user])
          sign_in @user
          flash[:success] = "Profile updated"
          redirect_to @user
        else
          render 'edit'
        end
      end
    
      def destroy
        User.find(params[:id]).destroy
        flash[:success] = "User destroyed"
        redirect_to users_path
      end
    
    
      private
    
        def correct_user
          @user = User.find(params[:id])
          redirect_to root_path unless current_user?(@user)
        end
    
        def admin_user
          redirect_to root_path unless current_user.admin?
        end
    end
    
    class UsersController
    以下是views\users\index.html.erb

    <% provide(:title, 'Users') %>
    <h1>Users</h1>
    
    <%= will_paginate %>
    
    <ul class="users">
      <%= render @users %>
    
    </ul>
    
    <%= will_paginate %>
    
    
    使用者
    
    下面是views\users\show.html.erb

    <% provide(:title, @user.name) %>
    <div class="row">
      <aside class="span4">
        <section>
          <h1>
            <%= gravatar_for @user %>
            <%= @user.name %>
          </h1>
        </section>
        <section>
          <%= render 'shared/stats' %>
    
        </section>
      <br>
      </aside>
    
    
      <div class="span10">
        <%= render 'follow_form' if signed_in? %>
        <% if @user.microposts.empty? %>
    <h3>Microposts (<%= @user.microposts.count %>)</h3>
    <% end %>
        <% if @user.microposts.any? %>
          <h3>Microposts (<%= @user.microposts.count %>)</h3>
          <ol class="microposts">
            <%= render @microposts %>
          </ol>
    
          <%= will_paginate @microposts %>
        <% end %>
      </div>
    </div>
    
    
    
    微孔() 微孔()
    使用以下代码更新部分(\views\users\\u user.html.erb):

    <%- if @user %>
      <%= @user.microposts.count %>
    <%- else %>
      THIS IS THE ERROR, THERE IS NO USER ON @user
    <%- end %>
    

    是的,用户模型和Micropost模型有关联吗?我对RoR很陌生。你能进一步解释一下怎么做吗?这是用户模型的开始,它有微操作。class User2:3:4:5:我迷路了。我没有给出第一个、第二个或第三个方法,只是解释了部分和变量。然而,第一段代码应该显示在屏幕上:这是错误,\@USER上没有用户。这意味着在分部上,\@用户不存在。您已经编写了分部的内容,控制器尝试使用调用分部的视图更新您的问题,然后我们将能够发现错误。尽管如此,如果您阅读了Rails指南中关于partial的内容,您应该能够立即发现错误。Rorra,我用调用partial的视图更新了这个问题。现在看起来怎么样?现在,它显示这是一个错误,屏幕上的\@USER上没有用户。因为在partial上,@USER没有引用任何变量。把完整的逻辑、控制器的代码和调用分部的视图放在一起,我会让您知道问题出在哪里。
    <%= user.microposts.count %>
    
    <%= render partial: '/views/users/user', object: @my_user %>
    
    <%= render @user %> 
    
    <%= render partial: '/views/users/user', collection: @users %>
    
        <li>
          <%= gravatar_for user, size: 52 %>
          <%= link_to user.name, user %>
          <%= user.microposts.count %>
          <% if current_user.admin? && !current_user?(user) %>
            | <%= link_to "delete", user, method: :delete, confirm: "You sure?" %>
          <% end %>
        </li>
    
    <%= render @users %>
    
    @users = User.paginate(page: params[:page]).all