所以我建立的网站用户只能提交一次帖子,然后是"新帖子"按钮永远消失了。
我还想限制帖子的总量。所以,只有前100名左右的人才能真正发帖。
我使用rails generate scaffold构建发布系统。
我不知道从哪里开始。
谢谢!
答案 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,或者推出自己的实现。我建议Devise或Clearance。
祝你好运!