我正在创建域检查器,并想知道最好的逻辑是什么。
我正在使用这个rails gem:https://github.com/weppos/whois
我的解决方案必须创建:
我有1个输入字段,用户输入他们想要的域名。提交时,它会呈现所有可用的顶级域名。
在我的行动中我会:
@domain = params[:domain]
@dk = Whois.whois("#{@domain}.dk")
@com = Whois.whois("#{@domain}.com")
@it = Whois.whois("#{@domain}.it")
@no = Whois.whois("#{@domain}.no")
@se = Whois.whois("#{@domain}.se")
@is = Whois.whois("#{@domain}.is")
And 50 more domains ...
然后我会有一个助手将一个类应用于实例变量,取决于它是否可用。名为domain_check的示例。这样我就可以在视图中写入<%= domain_check(@is)%>
是否没有更好的解决方案来创建域检查器而不是创建大约50个重复的实例变量?
更新
module PublicHelper
require 'whois'
def domain_checker(obj, options={})
options[:info] ||= obj
options[:info_class] ||= 'info'
options[:pinfo] ||= obj
options[:pinfo_class] ||= 'pinfo'
if obj.available?
content_tag(:span, options[:pinfo], :class => options[:pinfo_class])
else
content_tag(:span, options[:info], :class => options[:info_class])
end
end
end
在视图中:
<% @results.each do |webhost| %>
<%= domain_checker(webhost) %><br />
<% end %>
我收到此错误:
NoMethodError in Public#domain
Showing C:/Rails/webhostapp/app/views/public/domain.html.erb where line #2 raised:
undefined method `available?' for #<Array:0x23eb3f0>
Extracted source (around line #2):
1: <% @results.each do |webhost| %>
2: <%= domain_checker(webhost) %><br />
3: <% end %>
答案 0 :(得分:2)
我是这样做的:
控制器:
country_codes = ['.dk', '.com', '.it', '.no'] # etc. could move this to a config if needed
@domain = params[:domain]
@results = {}
country_codes.each do |cc|
@results[cc] = Whois.whois(@domain + cc).available?
end
然后@results是:
{".dk" => true, ".com" => false} # etc.
然后在视图中(如果需要,可以将其移动到帮助器):
<ul>
<% @results.each_pair do |country_code, available| %>
<% klass = available ? "pinfo" : "info" %>
<li><%= @domain + country_code %><span class="<%= klass %>"></span></li>
<% end %>
</ul>