2013-10-20 41 views
0

上午所有,的ActiveRecord :: RecordNotSaved - 強制嵌套重定向

花費了大半夜搞清楚如何把一個限制在我的模型創建我終於得到了地方之後。嵌套聲明現在向我展示未保存這是一個好消息。

但是我似乎無法得到重定向或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]) 

回答

0

Bang方法(create!,save!)在失敗時拋出錯誤,而不是返回,什麼評估爲false。

消除爆炸應該解決這個問題。

+0

謝謝,不知道爆炸是否這樣會避免它,我可以在哪裏 –