Ruby on rails 3 Rails-创建一个before过滤器,以检查它是否';已经7天了,然后添加新项目
我承认,我不知道为什么before过滤器是(或者即使是)处理我的问题的最佳方式,但是一个比我更了解Rails编程的开发人员告诉我,它是。所以我要试着让它工作 所以我要做的是检查数据库中最新的书是否是7天前创建的,如果是,创建一本新的 以下是my books controller当前的外观: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
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放在作用域内,过滤器是这样的逻辑更好的地方。它已经在过滤器内了。所以如果我把它从作用域中拿出来,我就必须把它插入到其他类型的循环中,才能得到最新的,不是吗?