Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails-创建一个before过滤器,以检查它是否';已经7天了,然后添加新项目_Ruby On Rails 3_Before Filter - Fatal编程技术网

Ruby on rails 3 Rails-创建一个before过滤器,以检查它是否';已经7天了,然后添加新项目

Ruby on rails 3 Rails-创建一个before过滤器,以检查它是否';已经7天了,然后添加新项目,ruby-on-rails-3,before-filter,Ruby On Rails 3,Before Filter,我承认,我不知道为什么before过滤器是(或者即使是)处理我的问题的最佳方式,但是一个比我更了解Rails编程的开发人员告诉我,它是。所以我要试着让它工作 所以我要做的是检查数据库中最新的书是否是7天前创建的,如果是,创建一本新的 以下是my books controller当前的外观: class BooksController < ApplicationController before_filter :check_seven_days, :only => [:create

我承认,我不知道为什么before过滤器是(或者即使是)处理我的问题的最佳方式,但是一个比我更了解Rails编程的开发人员告诉我,它是。所以我要试着让它工作

所以我要做的是检查数据库中最新的书是否是7天前创建的,如果是,创建一本新的

以下是my books controller当前的外观:

class BooksController < ApplicationController
  before_filter :check_seven_days, :only => [:create]

...

def create
    @book = Book.new(params[:book])

    respond_to do |format|
      if @book.save
        format.html { redirect_to user_url(@book.user), notice: 'Book was successfully added to your queue.' }
        format.json { render json: @book, status: :created, location: @book }
      else
        format.html { render action: "new" }
        format.json { render json: @book.errors, status: :unprocessable_entity }
      end
    end
  end

...

protected
        def check_seven_days
            @user = User.find(params[:id])

            @not_queued_books = @user.books.not_queued

            @not_queued_books.each do |book|
                Book.new if book.created_at >= 7.days.ago
            end
        end


end
class BooksController[:create]
...
def创建
@book=book.new(参数[:book])
回应待办事项|格式|
如果@book.save
format.html{重定向到用户url(@book.user),注意:'book已成功添加到您的队列。}
format.json{render json:@book,status::created,location:@book}
其他的
format.html{呈现操作:“新建”}
format.json{render json:@book.errors,status::unprocessable_entity}
结束
结束
结束
...
受保护的
def检查七天
@user=user.find(参数[:id])
@not_queued_books=@user.books.not_queued
@没有排队的书。每个人都有自己的书|
Book.new如果Book.created_在>=7.days.ago创建
结束
结束
结束
然而,这根本不起作用。before过滤器中的代码或多或少是伪代码。我们之所以这样称呼它,是因为我还在学习如何正确地编写Ruby!但希望你能理解我想做的事情:)

另外,您可以看到这是从哪里来的,我使用模型中的作用域来检查是否在25秒前添加了一本书:

scope :queued, lambda { where('created_at > ?', 25.seconds.ago) }
  scope :not_queued, lambda { where('created_at <= ?', 25.seconds.ago) }
  scope :date_desc, order("created_at DESC")
scope:queued,lambda{where('created_at>?',25.seconds.ago)}

作用域:not_queued,lambda{where('created_atBook.new)只是实例化一个新的Book对象,不保存也不带任何参数;您的意思是:

Book.create(params[:book])

Book.new只是实例化一个新的Book对象,不保存也不带任何参数;您的意思是:

Book.create(params[:book])

是的,这绝对是一个开始!你认为这需要在
@不排队的书籍
块中吗?只是在这里寻找我的解决方案的补充:)我不会把create放在作用域内,对于这样的逻辑来说,过滤器是一个更好的地方。但是它已经在过滤器内了。所以如果我把它从作用域中拿出来,我就必须把它插入到其他类型的循环中才能得到最新的循环,不是吗?是的,这肯定是一个开始!你认为它需要在
@不排队的书中吗ode>block?只是想加强我的解决方案:)我不会把create放在作用域内,过滤器是这样的逻辑更好的地方。它已经在过滤器内了。所以如果我把它从作用域中拿出来,我就必须把它插入到其他类型的循环中,才能得到最新的,不是吗?