2017-12-28 4 views
0

私のtoy_appに新しいマイクロポストを追加または編集することはできません(Railsチュートリアルの第2章)。私はユーザーとマイクロポストを問題なく追加しました。それから私はhas_many/belongs_to関係を指定しました。それ以来、私は得ています:Michael HartlのRuby on Railsチュートリアルでエラーメッセージが表示される:MicroPostsController#createのNoMethodError。このメッセージが表示されないようにするにはどうすればよいですか?

"マイクロポストを作成しようとすると、マイクロポストを更新するときに同様のメッセージが表示されます。

私は1人のユーザーしかいないが、ユーザーIDは「3」だった...なぜそれが1でないのかわからない。私はすべてのマイクロポストを削除してから1人のユーザーしかいない。このエラーメッセージを回避するにはどうすればよいですか?もし誰かが私が大いに感謝するのを助けることができたら。

マイクロポストコントローラー:

class MicropostsController < ApplicationController 
    before_action :set_micropost, only: [:show, :edit, :update, :destroy] 

    # GET /microposts 
    # GET /microposts.json 
    def index 
    @microposts = Micropost.all 
    end 

    # GET /microposts/1 
    # GET /microposts/1.json 
    def show 
    end 

    # GET /microposts/new 
    def new 
    @micropost = Micropost.new 
    end 

    # GET /microposts/1/edit 
    def edit 
    end 

    # POST /microposts 
    # POST /microposts.json 
    def create 
    @micropost = Micropost.new(micropost_params) 

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

    # PATCH/PUT /microposts/1 
    # PATCH/PUT /microposts/1.json 
    def update 
    respond_to do |format| 
     if @micropost.update(micropost_params) 
     format.html { redirect_to @micropost, notice: 'Micropost was successfully updated.' } 
     format.json { render :show, status: :ok, location: @micropost } 
     else 
     format.html { render :edit } 
     format.json { render json: @micropost.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /microposts/1 
    # DELETE /microposts/1.json 
    def destroy 
    @micropost.destroy 
    respond_to do |format| 
     format.html { redirect_to microposts_url, notice: 'Micropost was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_micropost 
     @micropost = Micropost.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def micropost_params 
     params.require(:micropost).permit(:context, :user_id) 
    end 
end 

マイクロポストモデル:

class Micropost < ApplicationRecord 
    belongs_to :user 
    validates :content, length: { maximum: 140 } 
end 

ユーザーモデル:

class User < ApplicationRecord 
    has_many :microposts 
end 

ユーザーコントローラー

class UsersController < ApplicationController 
    before_action :set_user, only: [:show, :edit, :update, :destroy] 

    # GET /users 
    # GET /users.json 
    def index 
    @users = User.all 
    end 

    # GET /users/1 
    # GET /users/1.json 
    def show 
    end 

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

    # GET /users/1/edit 
    def edit 
    end 

    # POST /users 
    # POST /users.json 
    def create 
    @user = User.new(user_params) 

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

    # PATCH/PUT /users/1 
    # PATCH/PUT /users/1.json 
    def update 
    respond_to do |format| 
     if @user.update(user_params) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { render :show, status: :ok, location: @user } 
     else 
     format.html { render :edit } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /users/1 
    # DELETE /users/1.json 
    def destroy 
    @user.destroy 
    respond_to do |format| 
     format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def user_params 
     params.require(:user).permit(:name, :email) 
    end 
end 

schema.rb:あなたのmicropost_paramsあなたがcontextを許可しているに

ActiveRecord::Schema.define(version: 20171222133429) do 

    create_table "microposts", force: :cascade do |t| 
    t.text "content" 
    t.integer "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "users", force: :cascade do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

end 
+0

ようこそ、私は明確な質問を見つけることができませんでした。あなたの投稿を修正し、解決する質問を定義できますか?お読みください[お問い合わせ方法](https://stackoverflow.com/help/how-to-ask) –

答えて

0

。私はそれがcontentであるべきと仮定します。あなたのschema.rbを調べて、あなたのmicropostsテーブルにある列を確認してください。

+0

私はschema.rbを追加しました。私はここでコンテンツにコンテキストを変更しました。 micropostsコントローラ –

+0

私はschema.rbを追加しました...私はschema.rbの "context"を "content"に変更し、micropostsコントローラでも同じことをしましたが、それでも動作しません。新しいマイクロポストを作成しようとしているときに表示されるメッセージは、「のための未定義のメソッド 'content 'ですか?コンテキストコンテキスト=コンテキストですか? –

+0

OK "コンテンツ"のすべてのインスタンスを "コンテキスト"に変更しました。 –

関連する問題