我想我可能会接近这个错误。在Rails上寻找Rails社区的建议来处理这样的事情:
我有预订资源。模型属性类似于:
# == Schema Information
#
# Table name: reservations
#
# id :integer not null, primary key
...
# amount_received :integer
# party_size :integer default(1)
# user_id :integer
# event_id :integer
# confirmed_at :datetime
# edited_by :integer
# comped_by :integer
# created_at :datetime not null
# updated_at :datetime not null
...
这些对象可能会发生很多事情:
我的问题是基本但是如何处理这些事件?它们都是控制器上update
动作的一部分(好吧,除了第一个和最后一个)。我的控制器正在松懈并开始“闻”。现在我通过添加param
然后检查控制器中是否存在param
来识别“操作”。然后根据它是什么我检查用户是否有权执行所述操作(虽然通过操作我的意思是更新的子操作,因为他们所有 update
“操作”)然后,只有这样,我才能在模型receive_payment(amount)
上调用方法。
这很麻烦,因为用户可以更新他们的预订(取消和更改party_size),但他们不能“收到付款”或“补偿”等等...我我正在使用Ryan Bates'Can Can gem进行授权,但我不知道它在这个很好的水平上帮助了我......
例如,flash
邮件应该更加具体,例如"Payment received from #{@reservation.user.name}"
或"Could not comp reservation for {@reservation.user.name}"
控制器:
def update
@reservation = Reservation.find(params[:id])
# authorize! :update, @reservation #handled by load_and_authorize_resource up top
authorize! :accept_payment, @reservation if params[:reservation][:comped_by]
@reservation.edited_by = current_user.id if params.has_key?(:amount_received)
...
if @reservation.update_attributes params[:reservation]
redirect_to event_reservations_path(@reservation.event_id), flash: { success: "Reservation updated" }
else
render action: "show", error: "Error updating reservation"
end
end
思想?
似乎可能会接近这个错误?!?
感谢您的帮助!
答案 0 :(得分:0)
您可以在模型中创建方法,并在此类控制器中使用它。
def update
Reservation.method_for_all_actions(params[:some_parameter])
end
params [:some_parameter]应包含正在执行的操作类型,即
可以创建
付款可以应用于一个
可以确认。
它可以被编译(在具有适当授权的人内部)
可以取消 等...
然后检查模型传递的参数类型[:some_parameter]并执行功能。