0

我想在我的 Rails 应用程序中拥有漂亮而干净的结构。

现在我在模型文件夹中有 4 个文件:Post、PostTranslation、PostCategory 和 PostCategoryTranslation。

这是我的帖子.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

谢谢你的建议

4

2 回答 2

0

这里的主要最佳实践是正确定义您的域模型,这与 Rails 无关。

您需要决定彼此之间的关系Post和关系。PostTranslation如果PostTranslation < Post,那么belongs_to :post里面应该是不存在的PostTranslation

一旦你有一个更清晰的建模,把所有的类放在models文件夹本身。

于 2013-05-11T03:02:05.677 回答
0

我想到了。我添加了命名空间博客..

现在我有这些文件

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
于 2013-09-17T22:36:14.687 回答