1
我承認我不完全知道爲什麼之前的過濾器是(或者即使它是)處理我的問題的最佳方式,但是有一位開發人員告訴我,這個開發人員比我對Rails編程知道得多。所以我會試着讓它工作!Rails - 創建之前的過濾器來檢查它是否已經過了7天,然後添加新項目
所以我試圖做的是檢查數據庫中的最新圖書是否在7天前或更多時間創建,如果是,則創建一個新圖書。
這裏是我的書控制器目前的樣子:
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
但是這不完全是工作......在所有。前面的過濾器中的代碼或多或少是僞代碼。我們會這樣稱呼它,因爲我仍然在學習如何正確編寫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")
此外,鑑於環(在用戶顯示視圖)看起來是這樣的:
<% @not_queued_books.date_desc.each do |book| %>
<%= book.title %>
<%= book.author %>
<% end %>
是的,這絕對是一個開始! –
你認爲這需要放在'''@ not_queued_books''塊嗎?只是尋找我的解決方案在這裏加強:) –
我不會把創造放在範圍內,過濾器是一個更好的地方爲這樣的邏輯。 – Dan