Rails如何根据实例变量更改视图?

我有这个域名搜索操作:

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”,我想呈现此操作并将域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 答案

我想写一个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”)应该做什么,但是如果你需要对结果做一些事情,以防你有参数,你可以随时检查代码。大小== 1

0
额外

这两个动作都可以使用参数,你不需要将它们“发送”到第二种方法;他们已经在那里了。

如果满足您的条件,只需调用第二种方法,否则执行您已经在做的事情。

0
额外
如何检查params [:domain]是否有TLD?
额外 作者 Rails beginner,
查看有关apidoc的阵列文档;有很多方法可以做到这一点。请注意,与您的列表相比,有其他顶级域名;这可能重要也可能不重要。
额外 作者 Dave Newton,