2015-01-22 3 views
0

Так что я делаю сайт, на котором пользователи могут только отправить сообщение один раз, а затем кнопка «новый пост» уходит навсегда.Хотите ограничить количество сообщений в rails

Я также хотел бы установить лимит на общее количество сообщений. Таким образом, только первые 100 или около того людей могут публиковать сообщения.

Я использовал рельсы, создающие строительные леса, для создания системы проводки.

Я не знаю с чего начать.

Спасибо!

+0

Помогла ли вам хоть один из ответов? –

ответ

0

Вы можете создать константу, если все пользователи будут иметь один и тот же лимит, или добавить поле в свою пользовательскую запись, если вы планируете, чтобы каждый пользователь имел разные пределы.

Затем вы создаете валидатор, который проверить количество существующих постов и запретить создание новых сообщений, если достигнут предел

Более подробную информацию в рельсах руководстве: http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations

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

Этот код предполагает, что проверка подлинности пользователя , Если вы не включили аутентификацию, вам нужно использовать камень для этого или сверните свою собственную реализацию. Я бы рекомендовал Devise или Clearance.

Удачи вам!

Смежные вопросы