Неопределенный метод `save 'для nil: NilClass для @ micropost.save в Ruby on Rails - PullRequest
0 голосов
/ 24 июня 2018

Я знаю, что проблема заключается в том, что я пытаюсь сохранить нулевое значение, но я отлаживал в течение нескольких часов, и я не могу понять, что, по-видимому, приводит к тому, что значение равно нулю. Это происходит, когда я нажимаю на сообщение на кнопке микросообщения под текстовым полем.

Контроллер микросообщений

class MicropostsController < ApplicationController
    before_action :logged_in_user, only: [:create, :destroy]

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

    def create
      if @micropost.save
        flash[:success] = "Micropost created!"
        redirect_to root_url
      else
        render 'show'
      end
    end

    def destroy
    end

    private 
      def micropost_params
        params.require(:micropost).permit(:content)
      end
end

Модель Micropost

class Micropost < ApplicationRecord
    belongs_to :user
    default_scope -> { order(created_at: :desc) }
    validates :user_id, presence: true
    validates :content, presence: true, length: { maximum: 140 }
end

Просмотр Показать

    <% provide(:title, @user.first_name) %>
      <div class="row">
        <aside class="col-md-4">
         <section class="user_info">
           <h1>
           <%= gravatar_for @user %>
           <%= @user.first_name %>
           </h1>
         </section>
        </aside>
    </div>

    <div class="row">
      <aside class="col-md-4">
        <section class="user_info">
          <%= render 'shared/user_info' %>
        </section>
        <section class="micropost_form">
          <%= render 'shared/micropost_form' %>
        </section>
      </aside>
    </div>

    <div class="col-md-8">
      <% if @user.microposts.any? %>
        <h3>Microposts (<%= @user.microposts.count %>)</h3>
          <ol class="microposts">
            <%= render @microposts %>
          </ol>
         <%= will_paginate @microposts %>
     <% end %>
     </div>

1 Ответ

0 голосов
/ 24 июня 2018

Ваше действие создания должно быть

def create
  @micropost = Micropost.new(micropost_params)
  if @micropost.save
    flash[:success] = "Micropost created!"
    redirect_to root_url
  else
    render 'show'
  end
end

По умолчанию переменные экземпляра равны nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...