Ruby on rails RubyonRails目录中的文本文件存储位置?

Ruby on rails RubyonRails目录中的文本文件存储位置?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的RubyonRails应用程序中有一个文本文件,我想在模型中调用它。问题是,我想在放置文件方面遵循rails的惯例 我之所以使用.txt文件,是因为我需要迭代大量的单词。这是为了进行模型验证,我需要确保输入不包含任何这些单词 我可以只声明一个数组,但它会使我的模型变胖。因此,我想从一个文件中读取数据,在这个文件中我放置了逗号分隔的数组元素 我有几个想法 根目录:我可以直接将.txt文件添加到我的根目录中 公用目录:可以将其存储在/Public 临时目录:可以将其存储在/tmp Lib目录:

我的RubyonRails应用程序中有一个文本文件,我想在模型中调用它。问题是,我想在放置文件方面遵循rails的惯例

我之所以使用
.txt
文件,是因为我需要迭代大量的单词。这是为了进行
模型验证
,我需要确保输入不包含任何这些单词

我可以只声明一个数组,但它会使我的模型变胖。因此,我想从一个文件中读取数据,在这个文件中我放置了逗号分隔的数组元素

我有几个想法

  • 根目录:我可以直接将
    .txt
    文件添加到我的根目录中
  • 公用目录:可以将其存储在
    /Public
  • 临时目录:可以将其存储在
    /tmp
  • Lib目录:可以将其存储在
    /Lib
  • 内置模型:只需将其存储在
    /app/models/mymodel.rb
试图在这里找到类似的答案,但未能达成共识。无论如何,这是一个由两部分组成的问题。如何从模型内部的文件中读取。我会做类似的事情吗

file = File.read("#{Rails.root}/public/textfile.txt")

感谢您的帮助

没有存储文件的约定。所有文件都可以存储在公用文件夹中。如果您使用的Heroku或主机不允许对文件系统进行写访问,并且显然您需要进行写操作,那么这可能会有所不同


否则,您必须考虑此文件的用途。将文件存储在数据库中或使用此处介绍的rails存储系统可能是一个更好的主意:在这里,您可以找到有关

的更多信息。我希望您不要每次进行验证时都打开并读取此txt文件。我建议编写一个rake任务,读取文件一次,解析单词并将它们存储在一个索引数据库列中。您可以创建一个名为“name”的字符串类型属性(当然带有索引)的模型禁止字。然后,您可以编写一个自定义验证器,并在MyModel中使用它,如下所示:

class WordConstraintValidator < ActiveModel::Validator
  def validate(record)
    if ForbiddenWord.exists?(name: record.name)
      record.errors[:base] << "You can not use the word #{record.name}"
    end
  end
end


class MyModel < ActiveRecord::Base
  validates_with WordConstraintValidator
end
class WordConstraintValidatorrecord.errors[:base]我将*.txt和相同的tmps文件存储在/lib中,但为什么需要*.txts?您使用文本文件的目的是什么?它是否仍然是未来项目的一部分?为什么不能将信息放入域模型,即DB?我需要
.txt
文件,因为我使用的是一个非常大的数组。我不得不将数组元素添加到文本文件中谢谢你的回答。如果有人能猜出文件名,是否会提供公共文件?是的,是公用文件夹:)出于这种目的直接从文本文件中读取是不好的做法吗?我还需要用这个来做随机建议,使用所有英语单词的列表。直接从文件读取的缺点是什么?直接从文件读取的问题是磁盘IO速度较慢。如果您将读取文件的内容一次,并将文件的内容存储在内存中的某个数据结构中,然后查询该数据结构,则没有问题,但如果您计划在每个请求上都这样做,则扩展性不好。也许是结帐。Redis支持许多内存中的数据结构,其中之一是字典排序集。这可能对你的问题有用。