我是Rails的新手,我的财务模型有一个RESTful控制器:
finances_controller.rb
def index
@finances = Finance.find_all_by_user_id current_user[:id] if current_user
end
def spending
@finances = Finance.find_all_by_user_id current_user[:id] if current_user
end
这使我可以在 index.html.erb 和 spend.html.erb 上获取我的财务模型。
但是,我还想在这两个中添加一些共享逻辑,例如:
def index
@finances = Finance.find_all_by_user_id current_user[:id] if current_user
finance = current_user.finance
@essentials = finance.rent.to_i +
finance.mortgage.to_i +
finance.gas.to_i +
finance.groceries.to_i +
finance.carpayment.to_i +
finance.carinsurance.to_i +
finance.othertransit.to_i +
finance.electric.to_i
end
这意味着我必须将这个逻辑复制到def index和def花费方法上,这似乎不对。 是否有更好的方法可以通过多种方法共享逻辑来解决这个问题?
答案 0 :(得分:0)
您可以在Finance
上将其设为类方法:
class Finance
def self.essentials(user)
finance = user.finance
finance.rent.to_i +
finance.mortgage.to_i +
finance.gas.to_i +
finance.groceries.to_i +
finance.carpayment.to_i +
finance.carinsurance.to_i +
finance.othertransit.to_i +
finance.electric.to_i
end
end
我将实例变量的设置放在before
过滤器中:
# controller
before_filter :load_finances, :only => [:index, :spending]
before_filter :load_essentials, :only => [:index, :spending]
def index
end
def spending
end
protected
def load_finances
@finances = Finance.find_all_by_user_id current_user[:id] if current_user
end
def load_essentials
@essentials = Finance.essentials(current_user) if current_user
end