2016-08-01 6 views
1

Eigentlich möchte ich die entsprechenden Datensätze ausblenden, wenn Hide Link geklickt wurde.Einträge ausblenden bei Klick im Frontend vorübergehend - Schienen 4.2

Bitte beachten Sie den Screenshot zum besseren Verständnis wie unten gezeigt;

screenshot.png

Vor dem Link angeklickt wird, verstecktes Attribut falsch ist wie in der unten stehenden Endgerät gezeigt;

Screenshot1.png

Nach der Link angeklickt wird, ergreift sie die jeweiligen ID und ruft die Verbergen Methode auf der Steuerung, die unten gezeigt ist;

Screenshot2.png

Das Problem ist, dass es auch nicht tut hinwegtäuschen, dass entsprechende Zeile oder die Werte aus der Balance Berechnung entziehen und wird zu xvaziris_url umgeleitet.

Ich versuchte es immer wieder, um dieses Problem zu lösen, aber leider nicht das gewünschte Ergebnis zu bekommen.

xvaziris_controller.rb

def index 
     @xvaziris = Xvaziri.find_by hidden: false 
     @xvaziris = Xvaziri.search(params[:search]) 

     respond_to do |format| 
      format.js 
      format.html 
     end 
    end 

def hide 
     @xvaziri = Xvaziri.find(params[:id]) 
     @xvaziri.hidden = true 
     flash[:notice] = 'Xvaziri was successfully hidden.' 
     redirect_to xvaziris_url  
    end 
end 

routes.rb

resources :xvaziris do 
     member do 
      get :hide 
     end 
    end 

_xvaziri.html.erb

<td class="col-1"><%= link_to "Hide", controller: "xvaziris", action: "hide", id: xvaziri, method: :get %></td> 

Alle Vorschläge sind willkommen.

Vielen Dank im Voraus.

+0

Bitte senden Sie Text als Text, wann immer möglich und nicht als Bilder. Bilder haben im Vergleich zu Klartext viele Mängel. –

+0

Danke für Ihren freundlichen Vorschlag. –

Antwort

1

Sie speichern das Ergebnis Ihrer Aktion nicht. Dieser Code @xvaziri.hidden = true setzt das Attribut hidden in true. Sie müssen die @xvaziri speichern.

Versuchen Sie diese Lösung.

def hide 
    @xvaziri = Xvaziri.find(params[:id]) 
    @xvaziri.update_attribute(:hidden, true) 
    flash[:notice] = 'Xvaziri was successfully hidden.' 
    redirect_to xvaziris_url  
end 

UPDATE

Ich habe gerade einen Klon Ihrer Anwendung und die Ausgabe.

Vor allem find_by gibt nur erste als describet führen here

Und zweitens sind Sie immer xvaziris Instanzen erhalten, die von Ihrem Suchmethode nicht von find_by

So hat sich gezeigt, lassen Sie uns Sie Controller-Index durch

Aktion
def index 
    @xvaziris = Xvaziri.find_by hidden: false 
    # find first not hidden xvaziri and 
    # store in into @xvaziris variable 

    @xvaziris = Xvaziri.search(params[:search]) 
    # find xvaziris according to search performed 
    # and store it into @xvaziris variable 
    # so, at this place you always have xvaziris 
    #that has been found but they may be hidden. 

    respond_to do |format| 
     format.js 
     format.html 
    end 
end 

Hier sind einige Vorschläge

Zunächst einmal einige Methoden in Xvaziri model

class Xvaziri < ActiveRecord::Base 

    scope :visible, -> { where(hidden: false) } 
    # returns only visible xvaziri's 

    def hide 
    update_attribute(:hidden, true) 
    end 

    def show 
    update_attribute(:hidden, false) 
    end 
end 

Dann in Ihrem Controller implementieren:

def index 
    @xvaziris = Xvaziri.search(params[:search]).visible 

    respond_to do |format| 
    format.js 
    format.html 
    end 
end 

def hide 
    @xvaziri = Xvaziri.find(params[:id]) 
    @xvaziri.hide 
    flash[:notice] = 'Xvaziri was successfully hidden.' 
    redirect_to xvaziris_url  
end 

Versteckte xvaziri

# app/models/xvaziri.rb 
scope :hidden, -> { where(hidden: true) } 

# app/controllers/xvaziris_controller.rb 
def hidden 
    @xvaziris = Xvaziri.search(params[:search]).hidden 
end 

def unhide 
    xvaziri = Xvaziri.find(params[:id]) 
    xvaziri.show 
    flash[:notice] = "Xvaziri is now visible." 
    redirect_to hidden_url 
end 

#app/views/xvaziris/hidden.html.erb 

<p id="notice"><%= notice %></p> 

<h1>Listing Xvaziris</h1> 

<table> 
    <thead> 
    <tr> 
     <th>ID</th> 
     <th>Description</th> 
     <th></th> 
    </tr> 
    </thead> 

    <tbody> 
    <% if @xvaziris.any? %> 
     <% @xvaziris.each do |xvaziri| %> 
     <tr> 
      <td><%= xvaziri.id %></td> 
      <td><%= xvaziri.description %></td> 
      <td><%= link_to 'unhide', unhide_xvaziri_path(xvaziri), method: :put %></td> 
     </tr> 
     <% end %> 
    <% end %> 
    </tbody> 
</table> 

# config/routes.rb 
resources :xvaziris do 
    member do 
    get :hide 
    get :unhide 
    end 
end 
get "hidden" => "xvaziris#hidden" 

Aber es ist nicht gut :get Methoden zu verwenden, zu modifizieren, das Model. Erwägen Sie stattdessen, :put Methode zu verwenden.

Meiner Ansicht Beispiel Link verwendet :put Methode

+0

Danke für die Antwort. Ich habe versucht, aber es funktioniert nicht für mich. Was kommt als nächstes? Da es nicht versteckte Attribute wahrnimmt ... –

+0

Ziemlich seltsam. Könnten Sie bitte Log-Nachrichten, die Sie sehen, mit 'update_attribute' übergeben? – retgoat

+0

Danke für die Antwort. Das ist sicher. –

Verwandte Themen