在Ruby on Rails上创建一个公告板

时间:2018-01-12 09:58:29

标签: ruby-on-rails ruby cancancan enumerize

有必要编写一个公告板,按类别划分广告(广告可以同时在不同的类别中)。 广告必须具有多种状态(审核/已批准/已拒绝),只有管理员才能更改状态。

请告诉我,我需要为广告表和类别创建模型中的哪些字段?我如何将它们绑在一起?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

# app/models/advert.rb
class Advert < ApplicationRecord
  has_and_belongs_to_many :categories
  enum status: [:moderation, :approved, :rejected]
end

# app/models/category.rb
class Category < ApplicationRecord
  has_and_belongs_to_many :adverts
end

您需要a JOINS table来链接这两个表。通过rails约定,这将被称为adverts_categories(但如果愿意,它很容易被覆盖)。

创建这些表的数据库迁移可以是:

class CreateAdverts < ActiveRecord::Migration[5.0]
  def change
    create_table :adverts do |t|
      t.integer :status
      # ...
    end
  end
end

class CreateCategories < ActiveRecord::Migration[5.0]
  def change
    create_table :categories do |t|
      # (What fields does this table have?)
      t.string :name
      # ...
    end
  end
end

class CreateAdvertsCategories < ActiveRecord::Migration[5.0]
  def change
    create_join_table :adverts, :categories do |t|
      t.index :advert_id
      t.index :category_id
    end
  end
end