Rails如何创建DRY域检查器?

时间:2011-08-18 09:09:16

标签: ruby-on-rails ruby ruby-on-rails-3

我正在创建域检查器,并想知道最好的逻辑是什么。

我正在使用这个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 %>

1 个答案:

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