Параметр ошибки Rails отсутствует или значение пустое: history - PullRequest
0 голосов
/ 06 декабря 2018

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

Мой index.html.erb

<tbody>
  <% undefined = "No definido" %>
  <% @histories.each do |history| %>
  <% if history.history_status == "publicada" %>
   <tr>
    <td><%= history.title %></td>
    <td><%= history.description %></td>
    <td><%= history.history_status %></td>
    <td style="text-align: center;">
     <div class="btn-group">
      <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown">
        Acciones
        <span class="caret">
        </span>
      </button>
      <ul class="dropdown-menu pull-right" role="menu">
        <li style="background-color:#337ab7; text-align: center;">
           <%= link_to "Ver Historia", admin_history_path(history)%>
        </li>
        <li style="background-color:#d9534f; text-align: center;">
            <%= link_to 'Rechazar Historia', admin_rechazar_historia_path(history), :title => history.title, :description => history.description, method: :patch, data: { confirm: 'Are you sure?' } %>
        </li>
        <li style="background-color:#f0ad4e; text-align: center;">
            <%= link_to 'Eliminar Historia', admin_inactivar_historia_path(history), :title => history.title, :description => history.description, method: :patch, data: { confirm: 'Are you sure?' } %>
        </li>
      </ul>
     </div>
    </td>
  </tr>
 <% end %>  
 <% end %>
</tbody>

Мой history_controller.rb

class Admin::HistoriesController < Admin::BaseController

    before_action :set_history, only: [:show, :edit, :update, :destroy, :publicar_historia, :inactivar_historia, :rechazar_historia]

    def new
        @history = History.new
        @image = @history.images.build
    end

    def edit
        @image = @history.images.build
    end

    def create
        @history = History.new(history_params)
        @history.assign_attributes({:user_id => current_user.id})
        @history.assign_attributes({:history_status => 'publicada'})

        if @history.save
        params[:images]['picture'].each do |a|
            @image = @history.images.create!(:picture => a)
        end
            flash[:success] = "Historia creada exitosamente"
            redirect_to admin_histories_path
        else
            flash.now[:danger] = "La Historia no se pudo crear, por favor revise los campos"
            render 'new'
        end
    end

    def show
        @images = @history.images.all
    end

    def index
        @histories = History.all
    end

    def update
        @history.assign_attributes({:history_status => 'publicada'})
        if @history.update(history_params)
            flash[:success] = "Historia actualizada exitosamente"
            redirect_to admin_histories_path
        else
            flash[:warnig] = "Historia no actualizada"
            redirect_to admin_histories_path
        end
    end

    def inactivar_historia
        @history.assign_attributes({:history_status => 'inactiva'})
        if @history.update(history_params)
            flash[:success] = "Historia actualizada exitosamente"
            redirect_to admin_histories_path
        else
            flash[:warnig] = "Historia no actualizada"
            redirect_to admin_histories_path
        end
    end

    def publicar_historia
        @history.assign_attributes({:history_status => 'publicada'})
        if @history.update(history_params)
            flash[:success] = "Historia actualizada exitosamente"
            redirect_to admin_histories_path
        else
            flash[:warnig] = "Historia no actualizada"
            redirect_to admin_histories_path
        end
    end

    def rechazar_historia
       @history.assign_attributes({:history_status => 'rechazada'})
       if @history.update(history_params)
            flash[:success] = "Historia actualizada exitosamente"
            redirect_to admin_histories_path
       else
            flash[:warnig] = "Historia no actualizada"
            redirect_to admin_histories_path
       end
    end

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

    def history_params
        params.require(:history).permit(:title, :description,images_attributes: [:id, :picture, :history_id])
    end


end

И мой route.db

Rails.application.routes.draw do
  namespace :admin do
    resources :histories 
  end

  namespace :admin do
    patch "inactivar_historia/:id" => "histories#inactivar_historia", :as => :inactivar_historia
    patch "publicar_historia/:id" => "histories#publicar_historia", :as => :publicar_historia
    patch "rechazar_historia/:id" => "histories#rechazar_historia", :as => :rechazar_historia
  end
end

Ошибка: ActionController :: ParameterMissing в / admin / rechazar_historia / 2 параметр отсутствует или значение пусто: history

_form.html.erb

<%= simple_form_for [:admin, @history], html: {multipart: true} do |f| %>

  <%= f.input :title, label: "Título", required: true, autofocus: true %>

  <%= f.input :description, label: "Descripcion", required: true, autofocus: true %>

  <%= f.fields_for :images do |p| %>
    <div class="field">

      <%= p.label :picture %><br>
      <%= p.file_field :picture, :multiple => true, name: "images[picture][]" %>
    </div>
  <% end %>

 <p>
 <br>

 <div class="actions">
   <%= f.submit %>
 </div>

1 Ответ

0 голосов
/ 06 декабря 2018

Почему вы звоните @history.update(history_paramas) на rechazar_historia?вам не нужна эта строка, и это ошибка.

У вас есть ссылка на это действие, поэтому нет параметров [: history].Я полагаю, вы просто скопировали действие update для других действий, но вам не нужно обновлять весь объект для всех действий, вы не передаете никаких данных (и не должны, поскольку действие не"обновить", это "отклонить").

Просто измените эти @history.update(history_params) на @history.save, и оно должно работать.

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