我已为featured_posts
创建了一个表格,has_many
posts
可以在网站的首页上保留精选帖子。现在我想确保我只在featured_posts
创建一个条目。寻找可以存储在数据库中的单例模型条目。什么是rails
方式来确保?
由于这将是一个条目表,我认为我的数据库开销将是巨大的,有没有更好的方法来存储这种类型的单一条目?
答案 0 :(得分:1)
我这样做的方法是在你的帖子表和我的验证器中都有一个is_featured布尔列,确保只有一个这样做为真 - 例如:
class model < ActiveRecord::Model
validate :validate, on: :create
def validate(record)
errors.add('Maximum of one featured post') unless model.find(:is_featured => true).length == 1
end
答案 1 :(得分:0)
您可以通过执行以下操作来实现此目的:
<强> featured_posts_controller.rb 强>
def new
if featured_post.empty?
# create featured_posts
else
redirect_to featured_posts_path
# or you can throw an error
end
end
另一种方法是确保没有人可以访问new和create方法:
def FeaturedPostsController < ApplicationController
before_action :check_post_presence, only: [:new, :create]
private
def check_post_presence
redirect_to featured_posts_path if featured_post.exists?
end
end
最后,您可以在种子上创建默认的精选帖子,并通过在db/seeds.rb
中添加数据来完全删除新的和创建方法:
featured_post = FeaturedPost.create title: "Default Posts"