Rails hoe de weergave te veranderen afhankelijk van de instantievariabele?

Ik heb deze zoekactie voor het domein:

def domain
country_codes = ['.dk', '.com', '.eu', '.net', '.org', '.biz', '.info', '.nu', '.name', '.se', '.fi', '.net', '.de', '.it'] # etc. could move this to a config if needed
@domain = params[:domain]
@results = {}
country_codes.each do |cc|
  @results[cc] = Whois.whois(@domain + cc)
end
  render :layout => false
end

Als de params [: domein] "asdasdasd" of "iets" zijn, wil ik de standaardweergave weergeven.

Maar als de params [: domein] bijvoorbeeld "asdasd.dk" of "asdasdasd.com" zijn, wil ik deze actie renderen en de domeinparams verzenden naar deze actie:

def domainname
@tld = "get the tld" 
country_codes = [@tld]
@results = Domains.order("#{@tld} ASC")
country_codes.each do |cc|
  @results[cc] = Whois.whois(@domain + cc)
end
  render :layout => false
end
0

2 antwoord

Ik wilde een before_filter schrijven, maar na een gedachte is het een DROOG om een ​​actie te maken ...

def domain
  codes = get_tld(params[:domain]) || country_codes
  codes.each do |c|
    @results[c] = Whois.whois(@domain + c)
  end
    render :layout => false
  end
end

# return array with one element if matched, else nil
def get_tld(string)
  country_codes.each{|cc| return [cc] if string.end_with?(cc)}
  nil
end

#contry_codes should be defined somewhere else...

Ik begrijp niet wat @results = Domains.order ("# {@ tld} ASC") zou moeten doen, maar als je iets moet doen met resultaten in het geval dat je een paramset hebt, kun je altijd codes controleren. size == 1

0
toegevoegd

De params zijn beschikbaar in beide acties, je hoeft ze niet naar de tweede methode te "sturen"; ze zijn er al.

Bel gewoon de tweede methode als aan uw voorwaarden is voldaan, anders doe u wat u al doet.

0
toegevoegd
Hoe controleer ik of de params [: domein] een TLD hebben?
toegevoegd de auteur Rails beginner, de bron
Bekijk de Array-documenten op apidoc ; er zijn een aantal manieren om het te doen. Merk op dat er extra TLD's zijn vergeleken met uw lijst; dat kan al dan niet belangrijk zijn.
toegevoegd de auteur Dave Newton, de bron