Ruby on rails RubyonRails教程,由M.Hartl编写。第10.2.1章-未定义的局部变量或“micropost'”方法;

Ruby on rails RubyonRails教程,由M.Hartl编写。第10.2.1章-未定义的局部变量或“micropost'”方法;,ruby-on-rails,Ruby On Rails,我在第10.2.1章-未定义的局部变量或方法“micropost”中不断得到以下错误。我正在尝试在显示页面上呈现所有帖子 这是我的用户控制器: class UsersController < ApplicationController before_filter :signed_in_user, only: [:index, :edit, :update, :show, :destroy] before_filter :correct_user, only: [:e

我在第10.2.1章-未定义的局部变量或方法“micropost”中不断得到以下错误。我正在尝试在显示页面上呈现所有帖子

这是我的用户控制器:

class UsersController < ApplicationController
      before_filter :signed_in_user, only: [:index, :edit, :update, :show, :destroy]
      before_filter :correct_user, only: [:edit, :update]
      before_filter :admin_user, [:destroy]

      def index
        #@users = User.all
        @users = User.paginate(page: params[:page])
      end

      def new
        @user = User.new
      end

      def destroy
      @user = User.find(params[:id]).destroy
      flash[:success] = "User has been deleted!"
      redirect_to users_path
      end

      def show
        @user = User.find(params[:id])
        @microposts = @user.microposts.paginate(page: params[:page])
      end

      def edit
        @user = User.find(params[:id])
      end

      def update
        @user = User.find(params[:id])

        if @user.update_attributes(params[:user])
          #good!
          sign_in @user
          flash[:success] = "Profile"
          redirect_to user_path(@user)
        else
          render 'edit'
        end

      end

      def create
        @user = User.new(params[:user])
        if @user.save
            sign_in @user
            flash[:success] = "Welcome to the Ruby app!"
            redirect_to user_path(@user)
        else
            render 'new'
        end
      end

      private

      def signed_in_user
        if !signed_in?
          store_location
          flash[:error] = "Please sign in!"
          redirect_to signin_url
        end
      end

      def correct_user
        @user = User.find(params[:id])
        if !current_user?(@user)
          redirect_to '/'
        end
      end

      def admin_user
        if current_user.admin?
          #nothing
        else
          redirect_to '/'
      end
    end





    end
class UsersController
这是我的看法

<% provide(:title, @user.name) %>
      <div class="row">
        <aside class="span4">
          <section>
            <h1>
              <%= gravatar_for @user %>
              <%= @user.name %>
            </h1>
          </section>
        </aside>

       <div class="span8">
          <% if @user.microposts.any? %>
            <h3>Microposts (<%= @user.microposts.count %>)</h3>
            <ol class="microposts">
                  <li>
                    <span class="content"><%= micropost.content %></span>
                    <span class="timestamp">
                    Posted <%= time_ago_in_words(micropost.created_at) %> ago.
                    </span>
                  </li>
            </ol>
            <%= will_paginate @microposts %>
          <% end %>
        </div>
      </div>

微孔()
  • 五年前发的。
  • 以下是micropost模型:

    # == Schema Information
            #
            # Table name: microposts
            #
            #  id         :integer          not null, primary key
            #  content    :string(255)
            #  user_id    :integer
            #  created_at :datetime         not null
            #  updated_at :datetime         not null
            #
    
            class Micropost < ActiveRecord::Base
              attr_accessible :content
    
              belongs_to :user
    
              validates :content, presence: true, length: { maximum: 140 }
              validates :user_id, presence: true
    
              default_scope order: 'microposts.created_at DESC'
            end
    
    #==架构信息
    #
    #表名:MicroPost
    #
    #id:整数不为空,主键
    #内容:字符串(255)
    #用户id:integer
    #创建时间:datetime非空
    #更新时间:datetime非空
    #
    类Micropost
    最后,这里是用户模型:

    # == Schema Information
      #
      # Table name: users
      #
      #  id              :integer          not null, primary key
      #  name            :string(255)
      #  email           :string(255)
      #  created_at      :datetime         not null
      #  updated_at      :datetime         not null
      #  password_digest :string(255)
      #  remember_token  :string(255)
      #  admin           :boolean          default(FALSE)
      #
    
      class User < ActiveRecord::Base
        attr_accessible :name, :email, :password, :password_confirmation
        has_secure_password
       has_many :microposts, dependent: :destroy
        before_save { |user| user.email = email.downcase }
        before_save :create_remember_token
        validates :name, presence: true, length: { maximum: 50 }
        VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
        validates :email, presence:   true,
                          format:     { with: VALID_EMAIL_REGEX },
                          uniqueness: { case_sensitive: false }
        validates :password, presence: true, length: { minimum: 6 }
        validates :password_confirmation, presence: true
    
        private
    
        def create_remember_token
          self.remember_token = SecureRandom.urlsafe_base64
        end
      end
    
    #==架构信息
    #
    #表名:用户
    #
    #id:整数不为空,主键
    #名称:字符串(255)
    #电子邮件:string(255)
    #创建时间:datetime非空
    #更新时间:datetime非空
    #密码摘要:字符串(255)
    #记住\u标记:字符串(255)
    #管理员:布尔默认值(FALSE)
    #
    类用户

    请让我知道,如果你想让我张贴更多的代码。谢谢

    在您看来,我看到有时您将micropost称为:

    micropost.content
    
    在其他情况下,作为类属性:

    @micropost
    

    您应该对此进行检查。

    您的视图似乎缺少一条线,该线通过用户的微操循环显示它们。添加行:

    <% @microposts.each do |micropost| %>
    
    
    

    现在,行
    中的局部变量
    micropost
    将存在。

    在您的视图中,您没有循环
    @user。micropost
    ,请尝试以下操作:

          <% if @user.microposts.any? %>
            <h3>Microposts (<%= @user.microposts.count %>)</h3>
            <ol class="microposts">
              <% @user.microposts.each do |micropost| %>
                <li>
                  <span class="content"><%= micropost.content %></span>
                  <span class="timestamp">
                  Posted <%= time_ago_in_words(micropost.created_at) %> ago.
                  </span>
                </li>
              <% end %>
            </ol>
            <%= will_paginate @microposts %>
          <% end %>
    
    
    微孔()
    
  • 五年前发的。

  • 如果您想直接使用局部变量(micropost),就像micropost.content一样,那么您必须创建一个部分(html.erb)文件,并在视图中使用render方法调用该文件