2017-06-22 2 views
0

Ich habe 3 ModelleRails - Anzeigedaten Beziehung, aber mit der Bedingung

  1. Job (belongs_to :hiring_procedure)
  2. Einstellung Verfahren (has_many :jobs, has_many :hiring_procedure_stages)
  3. Einstellung Verfahrensstufe (belongs_to :hiring_procedure)

Dieses Mittel Innerhalb der Ansicht, in der ich einen Job anzeige, kann ich auf verschiedene Einstellungsstufen wie folgt zugreifen, die gut funktionieren.

job.hiring_procedure.hiring_procedure_stages 

Meine Frage ist, wird der obige Code alle Stufen zurückkehren, was ist, wenn ich nur Stufen will, wo die deleted Säule Modell hiring_procedure_stagef

ist ich eigentlich für verschiedene Stufen in einem Dropdown-Menü am Anzeige der Benutzer auswählen, und ich will den Benutzer nicht die gelöschten Stufen zu sehen (deleted Mittel, wo der gelöschte Wert t für Modell ist hiring_procedure_stage, es ist ein boolean)

<%= select_tag 
    'application_stage', 
    options_for_select(
    job.hiring_procedure.hiring_procedure_stages.map{ |p|[p.name, p.id] }, 
    hiring_procedure_stage_id 
),%> 

Gibt es eine Möglichkeit, dies in Sicht zu erreichen, oder ist es besser, diese Logik in den Controller in einer anderen Variablen zu legen und auf diese zu zugreifen?

Antwort

2

einen Bereich, in hiring_procedure_stage.rb Modell

scope :active, -> { where(deleted: false) } 

Und jetzt können Sie die oben genannten Bereich verwenden wie:

job.hiring_procedure.hiring_procedure_stages.active 

Dies wird Ihnen nur zurückkehren hiring_procedure_stages wo deleted is false

+0

Schön, vielen Dank. – Saadia

2

Ein anderer Weg, dies zu tun, ist das Definieren der Beziehung mit dem Bereich Scope, so wird es immer Stadien betrachten, die nicht gelöscht werden.

Geben Sie dazu den Umfang zur Vereinigung von:

class HiringProcedure < ApplicationRecord 
    has_many :hiring_procedure_stages, -> { where(deleted: false) } 
end 

Und jedes Mal, verwenden Sie

hiring_procedure.hiring_procedure_stages 

Sie alle Stufen erhalten, die nicht gelöscht werden.

Natürlich wird diese Lösung nur empfohlen, wenn Sie nie versuchen werden, Stufen zu erhalten, die gelöscht werden.

+0

Danke, das ist auch eine saubere Lösung. – Saadia

Verwandte Themen