القضبان كيفية تغيير طريقة العرض تعتمد على متغير المثال؟

لدي إجراء بحث النطاق هذا:

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

إذا كانت params [: domain] هي "asdasdasd" أو "something" ، فأنا أريد عرض العرض الافتراضي.

ولكن إذا كانت المعلمات [: domain] هي مثال "asdasd.dk" أو "asdasdasd.com" ، فأنا أريد عرض هذا الإجراء وإرسال params المجال إلى هذا الإجراء:

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 إجابة

كنت أرغب في كتابة after_filter ، ولكن بعد التفكير ، مما يجعلها إجراء واحد سيكون أكثر جفافا ...

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...

لا أفهم ما هوresults = Domains.order ("# {@ tld} ASC") من المفترض القيام به ، ولكن إذا كنت بحاجة إلى القيام بشيء مع النتائج في حال كان لديك tld في params ، يمكنك دائماً التحقق من الرموز. حجم == 1

0
وأضاف

تتوفر المعلمات في كلا الإجراءين ، لا تحتاج إلى "إرسال" إلى الطريقة الثانية؛ انهم بالفعل هناك.

فقط اتصل بالطريقة الثانية إذا تم استيفاء شروطك ، وإلا فنفذ ما تفعله بالفعل.

0
وأضاف
كيف أتحقق من أن المعلمات [: المجال] لها نطاق TLD؟
وأضاف المؤلف Rails beginner, مصدر
تحقق من Array docs on apidoc ؛ هناك مجموعة من الطرق للقيام بذلك. لاحظ أن هناك نطاقات TLD إضافية مقارنة بقائمتك ؛ قد يكون أو لا يكون مهمًا.
وأضاف المؤلف Dave Newton, مصدر