我有一个博客应用。在首页上显示之前,每个帖子都需要首先进行检查"已发布" 。我需要表单上的复选框。
在django中我可以通过以下方式实现:
...
published = models.BooleanField(default=False)
...
...
posts = Post.objects.filter(published=True)
我如何在Rails中实现这一目标?
----------更新---------
[解决]
循序渐进 -
添加新迁移:
rails g migration add_published_to_posts published:boolean
在迁移文件上,将已发布的默认值设置为False
class AddPublishedToPosts < ActiveRecord::Migration
def change
add_column :posts, :published, :boolean, default: false
end
end
同时更新模型Post.rb
:
# app/models/post.rb
class Post < ActiveRecord::Base
scope :published, -> { where(published: true) }
scope :unpublished, -> { where(published: false) }
end
在帖子控制器中:
def index
@posts = Post.where(published: true)
end
在帖子控制器上添加:published
许可证:
def update
@post = Post.find(params[:id])
if @post.update(params[:post].permit(:title, :body, :published))
redirect_to @post
else
render 'edit'
end
end
答案 0 :(得分:1)
您可以使用迁移
在posts
表上添加已发布的布尔列
rails g migration add_published_to_posts published:boolean
然后,在生成的迁移文件上,为已发布的列
设置default: false
class AddPublishedToPosts < ActiveRecord::Migration
def change
add_column :posts, :published, :boolean, default: false
end
end
因此,每次创建新博文时,published
都为false
。您可以使用用于编辑博客帖子的表单上的复选框将此列设置为true
。
然后在您的模型上,您可以定义一个范围,以根据此标记拉出已发布的博客
# app/models/post.rb
class Post < ActiveRecord::Base
scope :published, -> { where(published: true) }
scope :unpublished, -> { where(published: false) }
end
您可以使用此范围通过Post.published
和Post.unpublished