Ruby on Rails数据库填充设计

时间:2016-05-24 08:23:28

标签: ruby-on-rails ruby postgresql csv

我有2个csv文件,第一个包含数千个区域名称/ ID配对,即

public class MiTag extends SimpleTagSupport {

    private String titulo;

    @Override
    public void doTag() throws JspException {
        JspWriter out = getJspContext().getOut();

        try {
            out.println("<h3>"+titulo+"</h3>");
            out.println("    <blockquote>");

            JspFragment f = getJspBody();
            if (f != null) {
                f.invoke(out);
            }
             out.println("    </blockquote>");
        } catch (java.io.IOException ex) {
            throw new JspException("Error in MiTag tag", ex);
        }
    }

    /**
     * @param titulo the Titulo to set
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }


}

等...

第二个包含有关这些区域的数据,唯一标识符是ID而不是名称(因为名称在area_name中不是唯一的)。

ID, area_name
1, "New York"
2, "New Jersey"

我会将第一个csv摄取到postgres一次,它永远不会改变,但我会每隔几周左右获得第二个csv的新行,我将用它将数据插入到数据库中。

我的问题是 - 在我的数据库中存储所有这些内容的最佳方法是什么,因为我需要向用户显示区域名称,但是当他们选择一个区域时,需要使用area_id查询数据库并且有数千个他们。

提前致谢!

1 个答案:

答案 0 :(得分:0)

最好将第一个csv存储在名为Area的表中,并将has_one关系发送到第二个模型(例如,AreaDetails)。然后,您可以通过第一个表查询第二个表。

class Area < ActiveRecord::Base
  has_one :area_detail, dependent: :destroy
end

class AreaDetails < ActiveRecord::Base
  belongs_to :area
end

现在,您可以通过运行以下方式获取ID为1的area_details:

Area.find(1).area_detail

我假设您在数据进入时删除了第二个表数据。如果您要保留数据并需要全部显示,那么您应该使用has_many而不是has_one。< / p>