lundi 20 avril 2015

Updating a list with checkboxes in Rails

I have been trying to implement a way to update an existing list through checkboxes. By selecting the relevant checkbox and then pressing the mark as complete button the list should update. I have followed the rails cast on this very carefully but i am still unable to get the logic to function as it should. When the checkboxes are selected and the mark as complete button is pressed the page refreshes but the list does not update.

controller:

    class Admin::DiagnosticsController < Admin::BaseController
  before_filter :diagnostic, :except => [:index, :complete]

  def index
      @diagnostics = DiagnosticInfo.all.order_by(:created_at.desc).page(params[:page]).per(50)
    # @diagnostics = DiagnosticInfo.where(:completed_at => nil).order_by(:created_at.desc).page(params[:page]).per(50)
    # @diagnostics = DiagnosticInfo.where(:completed_at => nil).order_by(:created_at.desc).page(params[:page]).per(50)
  end


  def show
    respond_to do |format|
      format.html
      format.json { render json: @diagnostic }
    end
  end

  def update
    if @diagnostic.update_attributes(params[:diagnostic_info])
      redirect_to admin_diagnostic_path, notice: 'Successfully updated.'
    else
      render action: "edit"
    end
  end

  def edit
  end

  def destroy
    diagnostic.destroy
    redirect_to admin_diagnostics_path
  end

  def complete
    DiagnosticInfo.where(params[:diagnostics_ids]).update_all(completed_at: Time.now)
    redirect_to admin_diagnostics_path
   # DiagnosticInfo.update_all(params[:diagnostics_ids]) 
   # DiagnosticInfo.update_all(["completed_at=?", Time.now], :id => params[:diagnostics_ids]) 
  end


private

  def diagnostic
    @diagnostic = DiagnosticInfo.find(params[:id])
  end

View:

%h1 Diagnostics
= form_tag complete_admin_diagnostics_path, :method => :put do
  %table
    %tr
      %th
      %th User
      %th Message
      %th Device
      %th RELS-Mobile Version
      %th Submitted
      %th Archive
    - @diagnostics.each do |diagnostic| 
      %tr
        %td
          %strong= link_to 'show', admin_diagnostic_path(diagnostic)
        %td
          - if diagnostic.user
            = link_to diagnostic.user.email, [:admin, diagnostic.user]
          - else
            unknown
        %td
          = diagnostic.data["message"]
        %td
          %pre= JSON.pretty_generate(diagnostic.data["device"])
        %td
          = diagnostic.data["appVersion"]
        %td
          = diagnostic.updated_at
        %td
          = check_box_tag "diagnostic_ids[]", diagnostic.id
          = diagnostic.data

    = submit_tag "Mark as complete"
= paginate @diagnostics

Aucun commentaire:

Enregistrer un commentaire