我想在我的Rails应用程序中拥有漂亮而干净的结构。
现在我在models文件夹中有4个文件:Post,PostTranslation,PostCategory和PostCategoryTranslation。
这是我的post.rb
class Post < ActiveRecord::Base
attr_accessible :image, :image_cache, :remove_image, :post_category_ids, :post_categories_attributes, :post_translations_attributes
validates :post_translations, :post_categories, presence: :true
translates :name, :content
has_many :post_translations, dependent: :destroy
accepts_nested_attributes_for :post_translations, allow_destroy: true
end
这是post_translation.rb
class PostTranslation < ActiveRecord::Base
attr_accessible :locale, :name, :content
validates :name, length: { maximum: 255 }, presence: true
validates :content, :locale, presence: true
belongs_to :post
end
我该怎么办?什么是最佳做法?制作帖子文件夹并将翻译移动到此文件夹并创建子模型?像这样:class Translation < Post
感谢您的建议
答案 0 :(得分:0)
这里的主要最佳实践是正确定义您的域模型,无论Rails如何,这都很好。
您需要确定Post
和PostTranslation
之间的关系。如果PostTranslation < Post
,那么belongs_to :post
可能不应该在PostTranslation
内。
如果您有更清晰的建模,请将所有类放在models
文件夹中。
答案 1 :(得分:0)
我明白了。我添加了名称空间Blog ..
现在我有了这些文件
blog/post.rb - Blog::Post
blog/post/translation.rb - Blog::Post::Translation
blog/category.rb - Blog::Category
blog/category/translation.rb - Blog::Category::Translation
class Blog::Post < ActiveRecord::Base
validates :translations, :categories, presence: true
translates :name, :content
accept_nested_attributes_for :translations, allow_destroy: true
end
class Blog::Post::Translation < Globalize::ActiveRecord::Translation
validates :name, presence: true
validates :locale, presence: true, uniqueness: { scope: :blog_post_id }
end