在Rails上if else boolean / checkbox

时间:2017-06-12 02:54:51

标签: ruby-on-rails ruby boolean

我有一个博客应用。在首页上显示之前,每个帖子都需要首先进行检查"已发布" 。我需要表单上的复选框。

在django中我可以通过以下方式实现:

models.py

...
published = models.BooleanField(default=False)
...

views.py

...
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

1 个答案:

答案 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.publishedPost.unpublished

未发布的博客文章在您的视图中提取已发布的博客帖子