在Rails中将帖子设为私有

时间:2014-03-27 17:27:03

标签: ruby-on-rails ruby-on-rails-4

我一直没有和Rails一起工作,而是在创建一个博客。我希望在帖子表单中有一个选择器,其中包含“Public”和“Private”,当选择Private时,除非用户已登录,否则该帖子不会显示。这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以在posts表中添加一个新的布尔字段:

rails generate migration add_published_to_posts published:boolean

添加此新文件的下一个:

class AddPublishedToPosts < ActiveRecord::Migration
  def change
    add_column :posts, :published, :boolean, default: 0
  end
end

这样,默认情况下,所有帖子都是“私有”(未发布)。如果您希望帖子默认为“公开”(已发布),请将默认值更改为1。

迁移数据库:

rake db:migrate

在您的课程中,您可以添加此范围:

class Post < ActiveRecord::Base
  default_scope { where(published: true) }
  # or
  scope :published, -> { where(published: true) }
end

在您的控制器中,添加以下内容:

def index
  # With default scope
  @posts = Post.all
  # With named scope
  @posts = Post.published
end

将新字段添加到表单并voilá

= form_for @post do |f|
  # other fields
  = f.check_box :published