2

Я собираю свои модели в подкаталоги, как показано ниже. Я пробовал все решения, перечисленные в StackOverflow, а также некоторые другие продолжают получать ошибки. Кажется, простая задача, и мне нужна помощь.Организация файлов моделей рельсов в подкаталоги

Makandra - Organizing Large Rails apps

Rails 4: organize rails models in sub path without namespacing models?

How to organize Rails models that are too fat?

Rails models in subfolders and relationships

Однако, я получаю эту ошибку:

ActiveRecord::StatementInvalid: Could not find table 'blog_posts'

конфигурации/application.rb:

1 require File.expand_path('../boot', __FILE__) 
    2 
    3 require 'rails/all' 
    4 
    5 # Require the gems listed in Gemfile, including any gems 
    6 # you've limited to :test, :development, or :production. 
    7 Bundler.require(*Rails.groups) 
    8 
    9 module Multifile 
10 class Application < Rails::Application 
11  # Settings in config/environments/* take precedence over those specified here. 
12  # Application configuration should go into files in config/initializers 
13  # -- all .rb files in that directory are automatically loaded. 
14 
15  # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 
16  # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 
17  # config.time_zone = 'Central Time (US & Canada)' 
18 
19  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 
20  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 
21  # config.i18n.default_locale = :de 
22 
23  # Do not swallow errors in after_commit/after_rollback callbacks. 
24  config.active_record.raise_in_transactional_callbacks = true 
25 end 
26 end 

Файлы:

app/models 
├── blog 
│   └── post.rb 
├── blog.rb 
└── concerns 

Маршруты:

3 resources :blogs do 
4  resources :posts 
5 end 

модели/блог/post.rb

13 class Blog::Post < ActiveRecord::Base 
14 belongs_to :blog 
15 end 

модели/blog.rb

11 class Blog < ActiveRecord::Base 
12 has_many :posts 
13 end 

ответ

1

Рельсы конвенции для имени таблицы для модели с именем Blog::Post является blog_posts. Вы можете переопределить, установив .table_name на вашей модели, как это:

class Blog::Post < ActiveRecord::Base 
    self.table_name = "posts" 
end 

Во всяком случае, я хотел бы предложить, чтобы следовать Rails конвенции, когда это возможно. Есть ли причина не называть вашу таблицу blog_posts?

+0

Спасибо! Я просто стараюсь, чтобы мои модели были организованы и готовы к масштабированию. Будет легче отделить или переместить мои ассоциации, если мои таблицы будут указаны отдельно. Однако я открыт для альтернатив. Любые предложения по организации более крупных приложений? – eternal44

+0

Это действительно открытый вопрос, ответ зависит от многих ограничений, которые, вероятно, пока неизвестны. Для более крупных приложений вам может быть лучше разделить его на разные приложения, которые обмениваются данными через API. Я предлагаю остаться с соглашениями Rails - в качестве меры безопасности, чтобы держаться подальше от дальнейшей боли в дороге - и адаптировать приложение, как только появятся требования, а не раньше. В этом случае я бы назвал модель 'Post'. Если у вас много моделей «Post», я бы назвал его «BlogPost» и назвал таблицу «blog_posts». Если вы предпочитаете формат имен для модели, я все равно буду искать «blog_posts». Мои 2 cts. – dgilperez

+0

Вы правы, это уже вызвало проблемы: я не могу генерировать новые сообщения с помощью этого метода. – eternal44