2016-03-24 16 views
0

Ich bin neu in Schienen, so dass Ihre Hilfe und Beratung sehr geschätzt werden würde.Schreibbereich für eine has_many gehört zu Association - Rails 4

Ziel:

  • was ich Ziel ist zu tun, um Anzeigen gehören, nur Antragsformulare anzuzeigen, die nicht abgelaufen sind.
  • Zur Zeit habe ich ein Benutzer, der alle den Job beworben hat adverts
  • derzeit - ich habe 3 Anzeigen erstellt - 2 aktiv sind und 1 hat
  • abgelaufen i alle Benutzer Antragsformulare von @user.forms.count zählen kann - dies alle Formulare für alle Anzeigen
  • könnte man mir wird angezeigt beraten, wie ich nur die Formen der Anzeigen des Benutzers anzeigen, die

Modelle

abgelaufen sind, nicht
user.rb 
has_many forms 

form.rb 
belongs_to user 
belongs_to advert 

advert.rb 
has_may forms 

scope :active_adverts, -> {where(['deadline >= ?', Date.current])} 

users_controller.rb

def dashboard 
    if current_user 
     @user = User.find(current_user) 
     @user_applications = @user.forms 
     @form = @user.forms.find(params[:id]) 
    else 
     redirect_to error_path 
    end 
    end 

Ich habe versucht, dies in der Ansicht "Ansichten/users/dashboard.html.erb" <%= @user.forms.where(advert: @form.advert.active_advert).count %> aber ich habe klar kommen, dass wird nicht funktionieren . Sie berät viel

Antwort

1

geschätzt werden Sie scope wie folgt definieren: So Ihre count function wird

class User < ActiveRecord::Base 
    has_many :forms 
    has_many :adverts, through: :forms # <-- The change here 
end 

class Advert < ActiveRecord::Base 
    has_many :forms 
    scope :active, -> { where('deadline > ?', Time.now) } # <-- The change here 
end 

class Form < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :advert 
end 

:

@users.adverts.active.count 
+0

danke soo viel Hieu! – ARTLoe

Verwandte Themen