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

时间:2011-10-27 13:26:16

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

我有这个域名搜索操作:

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”或“某事”,我想呈现默认视图。

但如果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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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