我在Ruby on Rails应用程序中有一个文本文件,我想在模型中调用它。问题是,我想在放置文件方面遵循rails约定。
我使用.txt
文件的原因是因为我有一个非常大的单词数组,我必须迭代。这是针对model validation
的,我需要确保输入不包含任何这些词。
我可以声明一个数组,但它会让我的模型变胖。因此,我想从我放置逗号分隔数组元素的文件中读取。
我有几个想法
.txt
文件添加到我的根目录/public
/tmp
/lib
/app/models/mymodel.rb
试图在这里找到类似的答案,但无法达成共识。无论如何,这是一个两部分的问题。我如何从模型中的文件中读取。我会做点什么吗
file = File.read("#{Rails.root}/public/textfile.txt")
感谢您的帮助
答案 0 :(得分:1)
没有用于存储文件的约定。所有文件都可以存储在公用文件夹中。如果您使用Heroku或不允许在文件系统上进行写访问的主机,这可能会有所不同,显然您需要编写。
否则,您必须考虑此文件的用途。将文件存储在数据库中或使用此处说明的rails store系统可能是一个更好的主意:session store guides在这里您可以找到有关security的更多信息
答案 1 :(得分:1)
我希望您每次进行验证时都不会打开并阅读此txt文件。我建议写一个rake任务,它会读取文件一次,解析单词并将它们存储在索引数据库列中。您可以使用名为' name'的属性创建一个模型ForbiddenWord。类型字符串(当然有索引)。然后你可以编写一个自定义验证器并在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
您可以将自定义验证器放在/ app / models /中,我也假设您在MyModel类上有一个name属性,否则相应地更改它。可能有其他可能的解决方案来解决这个问题,这是我想到的第一件事。