Ruby on rails 在Rails中手动填充select_标记

Ruby on rails 在Rails中手动填充select_标记,ruby-on-rails,ruby,Ruby On Rails,Ruby,我知道这看起来很疯狂,但我正试图这样做: def site_list @sites = [] Dir.new(base_dir = "./app/sites/").each do |name, idx| path = "#{base_dir}#{name}" if FileTest.directory?(path) && !name.starts_with?('.') @sites << name

我知道这看起来很疯狂,但我正试图这样做:

def site_list
    @sites = []

    Dir.new(base_dir = "./app/sites/").each do |name, idx|
      path = "#{base_dir}#{name}"
      if FileTest.directory?(path) && !name.starts_with?('.')
        @sites << name
      end
    end

    return @sites
  end
class SitesController < ApplicationController
  ...
  @sites = { :site1 => 'stackoverflow', :site2 => 'someothersite' }
  ...
end
只要陪我度过我的疯狂

有一个URL参数名为:site,如果存在,那么我希望手动创建一个动态下拉列表,以选择正确的元素。因此,要使其工作,我需要创建一个id>name的关联数组/哈希

逐步:

列出所有关联id的目录>名称id组成,它只是索引 根据:site URL参数,在选择列表中选择正确的元素 没有第三步。 那么您就有了:但是第三个参数作为选择的选项

希望这至少有点道理

英文描述

我正在根据文件系统中的文件夹填充数组 此数组用于填充select_标记 select_标签当前选定的项目将根据当前路线确定:地点 如果路线不包含:站点,则显示带有“请选择”的“选择”标记。。。或者类似的东西。
在select form helper中,您实际上可以传递一个散列,键将显示在select菜单中,值将是值。因此,让@sites成为散列,如下所示:

def site_list
    @sites = []

    Dir.new(base_dir = "./app/sites/").each do |name, idx|
      path = "#{base_dir}#{name}"
      if FileTest.directory?(path) && !name.starts_with?('.')
        @sites << name
      end
    end

    return @sites
  end
class SitesController < ApplicationController
  ...
  @sites = { :site1 => 'stackoverflow', :site2 => 'someothersite' }
  ...
end

只需更改块中的条件即可为您工作。表单中的代码看起来是这样的:我以为它在向我吐,因为它需要一个整数值,这看起来很奇怪。是的,我可以构建散列,我需要找到一种通过非DB缓存它的方法。这看起来棒极了,我会在几个小时后看一看。
class SitesController < ApplicationController
  before_filter :extract_select_option, :only => :your_action

  protected
  def extract_select_option
    # SITES - all sites readed from file
    @sites = SITES.keep_if { |key, value| value == params[:site] }
  end
end