想要限制rails中的帖子数量

时间:2015-01-22 01:16:06

标签: ruby-on-rails

所以我建立的网站用户只能提交一次帖子,然后是"新帖子"按钮永远消失了。

我还想限制帖子的总量。所以,只有前100名左右的人才能真正发帖。

我使用rails generate scaffold构建发布系统。

我不知道从哪里开始。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果所有用户都具有相同的限制,您可以创建常量,或者如果您计划每个用户具有不同的限制,则可以在用户记录中添加字段。

然后你创建一个验证器,检查现有帖子的数量,并在达到限制时禁止创建新帖子

rails guide中的更多信息:http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations

答案 1 :(得分:0)

另一种方法是使用策略对象。以下是我如何使用Pundit来解决此问题。

<强>更新

应用/模型/ post.rb

class Post < ActiveRecord::Base
  belongs_to :user

  def self.limit_exceeded?(max = 100)
    count >= max
  end
end

应用/模型/ user.rb

class User < ActiveRecord::Base
  has_one :post
end

应用/策略/ post_policy.rb

class PostPolicy < ApplicationPolicy
  def create?
    !user_has_post? && space_to_post?
  end

  private

  def user_has_post?
    user.post.present?
  end

  def space_to_post?
    !Post.limit_exceeded?
  end
end

应用/控制器/ posts_controller.rb

class PostsController < ApplicationController
  def show
    @post = Post.find(params[:id])
  end

  def new
    @post = Post.new
  end

  def create
    authorize(:post)
    @post = current_user.build_post(post_params)
    if @post.save
      redirect_to @post, notice: "Your post was created!"
    else
      render :new
    end
  end

  private

  def post_params
    params.require(:post).permit(:message)
  end
end

应用/视图/帖/ new.html.erb

<% if policy(:post).create? %>
  <%= form_for(@post) do |form| %>
    <%= form.text_area :message %>
    <%= form.submit "Post" %>
  <% end %>
<% else %>
  You cannot post.
<% end %>

此代码假定用户已通过身份验证。如果您尚未合并身份验证,则需要使用gem,或者推出自己的实现。我建议DeviseClearance

祝你好运!