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