2012-12-31 30 views
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 %> 

回答

1

Book.new只是要實例化一個新的Book對象不保存和沒有任何參數;你的意思是:

Book.create(params[:book]) 

+0

是的,這絕對是一個開始! –

+0

你認爲這需要放在'''@ not_queued_books''塊嗎?只是尋找我的解決方案在這裏加強:) –

+0

我不會把創造放在範圍內,過濾器是一個更好的地方爲這樣的邏輯。 – Dan

相關問題