私はハウスをモデル化したアプリを持っています。ハウスhas_many部屋、部屋has_manyライトとsmall_appliancesなど私はまた、どのようにアプリケーションにアクセスするCalculatorと呼ばれるコントローラがあります。データは、電卓コントローラを使用して家(およびその部屋)に追加されます。次に、app/views/calculator/report.html.erbにあるレポートが生成されます。計算ロジックはどこでRailsアプリケーションに入りますか?
私の質問は、レポートのすべての計算とロジックはどこに行くべきですか?現在、私はcalculator_helperのいくつかのものをすべて見ています。通常、これはモデルに入るでしょうか?しかし、電卓には生成されたモデルがありません。これの基準は何ですか?
ここに電卓コントローラがあります。
class CalculatorController < ApplicationController
def index
end
def save_house
@house = House.new(params[:house])
respond_to do |format|
if @house.save
format.html { render :action => 'add_rooms', :id => @house }
format.xml { render :xml => @house, :status => :created, :location => @house }
else
format.html { render :action => 'index' }
format.xml { render :xml => @house.errors, :status => :unprocessable_entity }
end
end
end
def add_rooms
@house = House.find(params[:id])
@rooms = Room.find_by_house_id(@house.id)
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid house #{params[:id]}")
flash[:notice] = "You must create a house before adding rooms"
redirect_to :action => 'index'
end
def add_room
@room = Room.new(params[:room])
@house = @room.house
respond_to do |format|
if @room.save
flash[:notice] = "Room \"#{@room.name}\" was successfully added."
format.html { render :action => 'add_rooms' }
format.xml { render :xml => @room, :status => :created, :location => @room }
else
format.html { render :action => 'add_rooms' }
format.xml { render :xml => @room.errors, :status => :unprocessable_entity }
end
end
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid house #{params[:id]}")
flash[:notice] = "You must create a house before adding a room"
redirect_to :action => 'index'
end
def report
flash[:notice] = nil
@house = House.find(params[:id])
@rooms = Room.find_by_house_id(@house.id)
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid house #{params[:id]}")
flash[:notice] = "You must create a house before generating a report"
redirect_to :action => 'index'
end
end
Calculatorクラスを教えてください。 –
私はジェームズの答えが好きです。あなたが自分自身に尋ねるべきもう一つの質問は、なぜあなたがコンベンションを壊しているのか、なぜ電卓のコントローラーがハウスコントローラーのようなものを扱うのかです。私はそれが間違っていると言っているわけではない、私はちょうどそれがいくつかのより多くの考えを入れておく価値があると言っている。 –
良い点、アンディ。ライアン、あなたがコントローラとビューについて心配する前にモデルを手に入れてください。このアプローチを使用すると、すべての計算の正しい場所がHouseモデルであることがわかります。 –