Какую команду я могу использовать для создания этой модели Ruby on Rails? - PullRequest
0 голосов
/ 12 июня 2011

Я создаю модель в Ruby on Rails, которая будет действовать как файловая система. У вас будут ресурсы (например, файлы), которые могут быть папками или самими файлами. Как я могу создать команду для этого?

Asset
  id (unique auto-incrementing number)
  name
  is_directory (bool)
  user_id (id of the owner)
  parent_asset_id (id of parent directory, or null if under the root)
  access_token (randomly generated token, used to send shareable links)
  contents

Я думаю что-то вроде:

rails generate model Asset 
  name:string 
  is_directory:boolean 
  user_id:integer 
  parent_asset_id:integer 
  access_token:string contents:??

У меня есть несколько вопросов:

  1. Какая разница между blob и longblob против mediumblob против longtext и т.д., и какую я хотел бы использовать? (Активы в основном текстовые ... не уверен, какой будет максимальный размер)

  2. Является ли parent_asset_id хорошим соглашением об именах, или есть что-то еще, что заставило бы Rails дать мне какой-нибудь секретный соус, аналогично тому, почему я выбрал имя user_id (в соответствии с моделью User)?

  3. Есть ли способ объявить случайное строковое значение по умолчанию для access_token? (Маркер доступа будет использоваться для разделяемой ссылки на актив)

  4. Что-нибудь еще, что я пропускаю?

Это подробный вопрос, поэтому я надеюсь, что он послужит примером для тех, кто хочет внедрить что-то вроде файловой системы в RoR.

Очевидно, что если вы действительно хотели реализовать файловую систему, вы бы использовали настоящую файловую систему или Amazon S3 ... но если вам нужна облегченная файловая система в RoR, это кажется как лучший подход.

1 Ответ

1 голос
/ 12 июня 2011

Прежде всего, я настоятельно рекомендую вам рассмотреть существующий драгоценный камень, такой как Скрепка , который будет обрабатывать многие из этих деталей для вас.

Ответы по порядку:

  1. Вы будете использовать двоичный тип поля для хранения общих данных, но если вы используете Paperclip, вам нужно будет использовать некоторые специальные поля, которые объясняются в документах Paperclip.

  2. Если под parent_asset_id вы действительно подразумеваете, что актив может «принадлежать» ко многим другим моделям, тогда посмотрите на настройку полиморфных отношений с полями id и type.Если вместо этого вы хотите сохранить путь к хранимому файлу, то Paperclip сделает это за вас.Подробнее см. # 3 ...

  3. Вы можете получить доступ к сохраненному файлу в Paperclip, вызвав что-то простое, как asset.url в вашем представлении.Если вы хотите пойти вручную и вставить случайный код, вы можете вставить обратный вызов в вашу модель Asset.rb, который делает что-то вроде:

    before_create :generate_key
    
    def generate_key
      self.key = ActiveSupport::SecureRandom.hex
    end
    

S3 не является сложной системой длянастроен на Rails, и он гораздо более гибкий и масштабируемый, чем хранение файлов в другом месте - однако, если вы хотите, тогда используйте путь «assets».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...