Как мне проверить время в Rails? Ограничение пользователя для публикации один раз в день - PullRequest
6 голосов
/ 29 марта 2011

Я пытаюсь ограничить количество сообщений пользователя раз в день, я думал о том, чтобы проверить, если Time.now - last_post_time равен <(секунда в дне), но тогда это приведет к 24-часовому периоду между каждым сообщением. </p>

То, что я хотел бы сделать, это просто разрешить одну запись в день в месяц, поэтому, если пользователь публикует сообщения 28 марта, он не может публиковать их снова до 29 марта.Но если бы он отправил сообщение в 22:00 28 марта, он мог бы опубликовать его снова в 12:01 29 марта.

Как бы я это сделал?

Редактировать:

Вот мой posts_controller, могу ли я получить некоторую помощь о том, как это изменить?

def create
    @post  = current_user.posts.build(params[:supportpost])
        if @post.save
          flash[:success] = "Your post was created!"
          redirect_to root_path
        else
          @feed_items = []
          render 'pages/home'
        end
    end

Я пытался что-то подобное, но это, безусловно, неправильно:

  def create
    post = @user.posts.find(:first, :conditions => ["STRFTIME('%d', created_at) = ?", Date.today.day])
      if post
       @post  = current_user.posts.build(params[:supportpost])
        if @post.save
          flash[:success] = "Your post was created!"
          redirect_to root_path
        else
          @feed_items = []
          render 'pages/home'
        end
    end

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Я бы, вероятно, добавил эту проверку в проверку в модели Post.Возможно, что-то вроде этого:

class Post < ActiveRecord::Base
  ...

  validate :date_scope

private
  def date_scope
    if Post.where("user_id = ? AND DATE(created_at) = DATE(?)", self.user_id, Time.now).all.any?
      errors.add(:user_id, "Can only post once a day")
    end
  end
end
2 голосов
/ 29 марта 2011
post = @user.posts.find(:first, :conditions => ["DATE(created_at) = DATE(?)", Time.now])
if post
  # he made a post today!
else 
  #he can post
end

Таким образом, в общем, он производит этот SQL-запрос:

 SELECT `posts`.* FROM `posts` WHERE (`posts`.user_id = 1) AND (DATE(created_at) = DATE('2011-03-29 04:35:45')) LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...