1

なぜ before フィルターが私の問題を処理する最良の方法なのか (または、そうであったとしても) 正確にはわからないことは認めますが、Rails について私よりもはるかによく知っている開発者から言われたことがあります。であることをプログラミングします。というわけで頑張って作ってみます!

そこで私がやろうとしているのは、データベース内の最新の本が 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

しかし、それは正確には機能していません...まったく。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")

また、ビュー ループ (users show ビュー内) は次のようになります。

<% @not_queued_books.date_desc.each do |book| %>
    <%= book.title %>
    <%= book.author %>
<% end %>
4

1 に答える 1

1

Book.new は、保存もパラメータもなしで新しい Book オブジェクトをインスタンス化するだけです。もしかして:

Book.create(params[:book])

?

于 2012-12-31T00:19:40.477 に答える