どのようにインスタンス変数に依存するビューを変更するレール?

私はこのドメインの検索アクションを持っています:

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"の場合、デフォルトのビューをレンダリングします。

しかし、 params [:domain] が "asdasd.dk"や "asdasdasd.com"のような場合は、このアクションをレンダリングし、ドメインパラメータをこのアクションに送信します。

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 答え

私はbefore_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")がするはずのことを理解していませんが、paramsを使用した場合に結果を得る必要がある場合は、常にコードをチェックできます。サイズ== 1

0
追加された

paramsは両方のアクションで使用できますが、2つ目のメソッドに「送信」する必要はありません。彼らはすでにそこにいる。

条件が満たされていれば2番目の方法を呼び出してください。そうでない場合は、既に行っていることをやり直してください。

0
追加された
params [:domain]にTLDがあることを確認するにはどうすればよいですか?
追加された 著者 Rails beginner,
apidocの配列ドキュメントをご覧ください。それを行う方法がたくさんあります。あなたのリストに比べて追加のTLD があることに注意してください。重要であるかもしれないし、重要でないかもしれない。
追加された 著者 Dave Newton,