Rails 3 - 模型结构

时间:2013-05-11 00:53:30

标签: ruby ruby-on-rails-3 model structure

我想在我的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

感谢您的建议

2 个答案:

答案 0 :(得分:0)

这里的主要最佳实践是正确定义您的域模型,无论Rails如何,这都很好。

您需要确定PostPostTranslation之间的关系。如果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