поруччя tutorial ch 2 помилка noMethodError: невизначений метод 'micropost'

Я нова робота, і я заповнюю проект: Глава 2.

Я використовую Ubuntu 12.04 LTS, віртуалізований разом із Sublime Text 2. Я використовую термінал у якості командного рядка.

http://ruby.railstutorial.org/ruby-on-rails-ututorial-book

У мене були декілька випробувань та помилок, але зараз я забитий і застряг.

Я працюю над Demo_app, і я застряг на малюнку 2.3.3 Я протестував мій localhost: 3000 і обидва/users/and/мікропосади/сторінки були створені, і все працює функціонально. тобто нові, редагувати, знищити тощо.

Я виконував як користувач, так і мікрополоскові граблі - "пакет розширює програму db: migrate", очевидно оновлюючи модель даних.

I now am entering the ruby console by typing 'ruby console' in terminal upon completion I get 1.9.1 :001 > first_user = User.first , the response is, User Load (0.1ms) SELECT "users".* FROM "users" LIMIT 1

=> #

Я зараз отримую

 1.9.1 :002 > and I type first_user.microposts

Це виникає помилка, яку я отримую з включеним командою

1.9.1 :001 > first_user = User.first
  User Load (0.1ms)  SELECT "users".* FROM "users" LIMIT 1
 => # 
1.9.1 :002 > first_user.microposts
NoMethodError: undefined method `microposts' for #
    from /home/user/rails_projects/demo_app/vendor/bundle/ruby/1.9.1/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:407:in `method_missing'
    from /home/user/rails_projects/demo_app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.13/lib/active_record/attribute_methods.rb:149:in `method_missing'
    from (irb):2
    from /home/user/rails_projects/demo_app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
    from /home/user/rails_projects/demo_app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
    from /home/user/rails_projects/demo_app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.13/lib/rails/commands.rb:41:in `'
    from script/rails:6:in `require'
    from script/rails:6:in `
'

I guess I will also post the other files I thought might be involved with the error.

my micropost.rb

    class Micropost < ActiveRecord::Base
    attr_accessible :content, :user_id

   belongs_to :user

   validates :content, :length => { :maximum => 140 }
   end

my users_controller.rb

    class UsersController < ApplicationController
      # GET /users
      # GET /users.json
      def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @users }
    end
  end

  # GET /users/1
  # GET /users/1.json
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end

  # GET /users/new
  # GET /users/new.json
  def new
    @user = User.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user }
    end
  end

  # GET /users/1/edit
  def edit
    @user = User.find(params[:id])
  end

  # POST /users
  # POST /users.json
  def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render json: @user, status: :created, location: @user }
      else
       format.html { render action: "new" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
     end
  end

  # PUT /users/1
  # PUT /users/1.json
  def update
    @user = User.find(params[:id])

    respond_to do |format|
     if @user.update_attributes(params[:user])
       format.html { redirect_to @user, notice: 'User was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /users/1
  # DELETE /users/1.json
  def destroy
    @user = User.find(params[:id])
    @user.destroy

    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
     end
  end
end

My user.rb file

class User < ActiveRecord::Base
    attr_accessible :email, :name
    has_many :microposts
end

My index.html.erb file

  </tr>

<% @users.each do |user| %>
   <tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
    <td><%= link_to 'Show', user %></td>
    <td><%= link_to 'Edit', edit_user_path(user) %></td>
    <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you     sure?'     } %></td>
  </tr>
<% end %>
</table>


<%= link_to 'New User', new_user_path %>

my routes.rb

DemoApp::Application.routes.draw do
  resources :microposts


  resources :users

#...
end

and I guess my Gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.13'

group :development do
    gem 'sqlite3', '1.3.5'
end
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '3.2.5'
  gem 'coffee-rails', '3.2.2'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '1.2.3'
end

gem 'jquery-rails', '2.0.2'

group :production do
    gem 'pg', '0.12.2'
end

The only complication I have ran into that I know of is when going through the tutorial is on 2.1 where you use the command

bundle update

and then

bundle install --without production

I had to reverse this process for the update to work properly... I looked on stackoverflow and found some other work arounds... perhaps it is this or somehow the way in which I setup my server or the original gems, ruby, rails install.

Thank you for your help, If I didn't post this correctly, I will take suggestions.

Tkin1

1
На жаль, я спробував це зробити і закрив консоль за допомогою cntrl d. Я також видалив репо на новій основі та запустив сервер ще раз кілька разів. можливо, у вас є інша пропозиція, щоб допомогти знайти корінь проблеми?
додано Автор tkin1, джерело
так, один момент, дозвольте мені зробити це.
додано Автор tkin1, джерело
додано Автор tkin1, джерело
перейдіть до кореня проекту та перезапустіть консоль. все виглядає добре, просто переконайтеся в тому, що запустіть консоль, використовуючи rail console або Rails c
додано Автор Muntasim, джерело
Чи можете ви поділитися своїм кодом репо?
додано Автор Muntasim, джерело

6 Відповіді

виглядає ваша модель користувача

class User < ActiveRecord::Base
  attr_accessible :email, :name
end

Немає асоціації визначено. Зроби це:

class User < ActiveRecord::Base
  attr_accessible :email, :name
  has_many: :microposts
end

Ви згадали це у вашому повідомленні, але це не відображає ваш код

7
додано
Гаразд, можливо, у мене є останнє розгортання, оскільки я спробував виправити помилки, спробую це і дам вам знати. хвилинку...
додано Автор tkin1, джерело
Так! Я дуже радий. Те, що я не робив, полягала в збереженні в Sublime Text, а замість закриття редактора. Я думаю, це вирішить руку, повну моїх проблем. Дякую, я б проголосував, якщо б мав репутацію, можливо, хтось інший.
додано Автор tkin1, джерело
Дякую! Я ціную це.
додано Автор tkin1, джерело
Я підпишу це +1 від вашого імені :)
додано Автор sevenseacat, джерело

У моєму випадку проблема полягала в тому, що я запустив rail console без збереження user.rb або micropost.rb .

Я вирішив це, вийшовши з rail console , зберігши як файли моделі, так і перезапустивши консоль rail .

Не вистачало збереження файлів моделі без перезапуску консолі rail .

3
додано
га, для мене мені просто довелося вийти з консолі залізниці та перезапустити залізничну консоль.
додано Автор barlop, джерело

Я побіг у ту саму помилку, і ось що зафіксував: Не слідуйте за книгою при введенні асоціацій, замість цього напишіть

has_many :Micropost 

і

belongs_to: User

Note both 'Micropost' і 'User' are capitalized і 'Micropost' is singular not plural

0
додано

Мені довелося перезавантажити міліцентр рейок, запустивши знову rail servers .

0
додано

Я впевнений, що у вас є відповідь на даний момент, але те, що я знайшов мою проблему, було це.

Я не запустив другий код bundle exec rake db: migrate , коли я зробив це, щоб виправити помилки.

0
додано

Ось що я зробив, щоб виправити мою проблему.

1) Подвійно перевірте ваші micropost.rb та user.rb.

У мене виникла проблема правопису, яка потребує виправлення.

2) Видаліть ваші старі повідомлення, створіть нові

Якщо ви створили записи зі старою конфігурацією, я думаю, що це викликає проблеми. Я видалив свої публікації (за допомогою програми), а потім створив кілька нових для користувача 1. Після цього я зміг запустити консольні команди рейків.

Удачі!

0
додано