Параметр отсутствует или значение пусто: post - PullRequest
0 голосов
/ 31 мая 2018

Я новичок на рельсах, я пытаюсь разместить сообщение для своих пользователей, но у меня есть ошибка для опции редактирования.Создание, индексирование, отображение и удаление работает, но не редактирование с ошибкой:

параметр отсутствует или значение пустое: post (в моих post_params)

my _form.html.erb (с is для создания и редактирования):

<%= form_for @post do |f| %>

  <%= render 'shared/post_error' %>

  <%= f.hidden_field :user_id, :value => @current_user.id %>

  <%= f.label :content, "Description :" %><br>
  <%= f.text_area :content, size: "60x12", placeholder: "Parlez un peu de vous" %><br>

  <%= f.submit "Créer l'annonce" %>

контроллеры моих сообщений:

class PostsController < ApplicationController
before_action :logged_in?, only: [:index, :show, :new, :create, :edit, :update, :destroy]

def index
  @posts = Post.paginate(page: params[:page])
end

def show
  @post = find_post
end

def new
  @post = Post.new
end

def create
  @post = Post.new(post_params)
  if @post.save
    flash[:success] = "Annonce créée avec succès"
    redirect_to @post
  else
    render 'new'
  end
end

def edit
  @post = Post.update(post_params)
end

def update
  @post = Post.update(post_params)
  if @post.save
    flash[:success] = "Annonce modifiée avec succès"
    redirect_to @post
  else
    render 'edit'
  end
end

def destroy
  Post.find(params[:id]).destroy
  flash[:success] = "Annonce supprimée avec succès"
  redirect_to root_path
end

private

def post_params
  params.require(:post).permit(:content, :user_id)
end

def find_post
    @post = Post.find(params[:id])
end
end

Я много чего пробую, но ничего не получается, ошибкапереключайтесь между: First argument in form cannot contain nil or be empty

Заранее благодарим за помощь

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Действие редактирования не должно использоваться для обновления, оно должно использоваться для получения объекта, который будет обновлен, поэтому измените действие редактирования

Также сначала убедитесь, что пользователь logged_in?, прежде чем выполнять какое-либо действие, покажите before_action :logged_in? должно идти раньше, чем before_action :find_post

before_action :logged_in?
before_action :find_post, only: [:show, :edit, :update, :destroy]
def edit
  #@post = Post.update(post_params)
end

def update
  @post = Post.update(post_params)
  if @post.save
    flash[:success] = "Annonce modifiée avec succès"
    redirect_to @post
  else
    render 'edit'
  end
end

Также убедитесь, что user_id: @current_user.id или <%= f.hidden_field :user_id, :value => current_user.id %>

, в зависимости от того, каким образом вы определили current_user, если идентификатор аутентификации выполнен devise самоцвет, тогда это должно быть current_user

0 голосов
/ 31 мая 2018

Следуйте по правильному пути

Посмотрите, правильно отредактировал контроллер

class PostsController < ApplicationController
    before_action :logged_in?
    before_action :find_post, only: [:show, :edit, :update, :destroy]
    def index
        @posts = Post.all.paginate(page: params[:page])
    end

    def show
    end

    def new
        @post = Post.new
    end

    def create
        @post = Post.new(post_params)
        if @post.save
          flash[:success] = "Annonce créée avec succès"
          redirect_to @post
        else
          render 'new'
        end
    end

    def edit
    end

    def update
        if @post.save
          flash[:success] = "Annonce modifiée avec succès"
          redirect_to @post
        else
          render 'edit'
        end
    end

    def destroy
        @post.destroy
        flash[:success] = "Annonce supprimée avec succès"
        redirect_to root_path
    end

    private

    def post_params
       params.require(:post).permit(:content, :user_id)
    end

    def find_post
      @post = Post.find(params[:id])
    end
end

и объект @current_user Я думаю, что это будет current_user как

<%= f.hidden_field :user_id, :value => current_user.id %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...