みなさん、おはよう、
モデルの作成に制限を設ける方法を考え出すのにほとんどの夜を費やした後、私はついにどこかへたどり着きました。ネストされたステートメントは、保存されていないことを示しています。これは素晴らしいニュースです。
ただし、リダイレクトまたは 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])