0

みなさん、おはよう、

モデルの作成に制限を設ける方法を考え出すのにほとんどの夜を費やした後、私はついにどこかへたどり着きました。ネストされたステートメントは、保存されていないことを示しています。これは素晴らしいニュースです。

ただし、リダイレクトまたは flash[:base] を機能させることができないようです。以下にコードを示します。

class SnippetsController < ApplicationController
  before_filter :find_book

   def create
   if @snippet = @book.snippets.create!(params[:snippet])
      redirect_to @book
    else
      flash[:base]
      #render 
   end
 end     


def approve
   #@snippet = @book.snippet.find(params[:id])
    if @snippet.update_attribute(:approved, true)
    redirect_to users_path
  else
   render root_path
  end 
end

  def edit
    @snippet = @book.snippets.find(params[:id])
  end    

  def update
    @snippet = @book.snippets.find(params[:id])

    respond_to do |format|
      if @snippet.update_attributes(params[:snippet])
        format.html { redirect_to @book, notice: 'Comment was successfully updated.' }
      else
        format.html { render action: "edit" }
      end
    end
  end

  private

  def find_book

    @book = Book.find(params[:book_id])
  end
end

モデルの親(本)

class Book < ActiveRecord::Base
  has_many :snippets
  attr_accessible :title, :book_id, :size

  def snippets_limit_reached?
   if size == 0
    self.snippets.count >= 2
    elsif size == 1
       self.snippets.count >= 3
     elsif size == 2
       self.snippets.count >= 4
     else
       return false
  end
 end
end

子 (スニペット)

class Snippet < ActiveRecord::Base
  before_create :check_limit
  belongs_to :book
   attr_accessible :content, :book_id 

  validates :book_id, presence: true


    def check_limit         
      if book.snippets_limit_reached?
        errors.add :base, 'Snippet limit reached.'           
        return false
      end       
      return true
    end 
end

他に何か必要な場合はお知らせください。実行中はネストされた作成を通過できません。

if @snippet = @book.snippets.create!(params[:snippet])
4

1 に答える 1

0

Bang メソッド (create!、save!) は、失敗した場合に false と評価されたものを返す代わりに、エラーをスローします。

バングを削除すると、この問題が解決するはずです。

于 2013-10-20T11:28:50.617 に答える