0
class User < ActiveRecord::Base
has_many :queued_workouts,
:conditions => "queue_position IS NOT NULL",
:order => "queue_position ASC"
has_many :workouts
end
class Workout < ActiveRecord::Base
end
class QueuedWorkout < Workout
# Have to give this its own class because acts_as_list always updates the
# queue_position when operating on user.workouts
acts_as_list :column => :queue_position, :scope => :user
end
我有锻炼的路线,但不需要它们用于QueuedWorkouts。每过一段时间,我都遇到了将QueuedWorkout而不是Workout传递到url_for的情况。在我的具体情况下,这发生在WorkoutObserver中。Rails模型继承和路由
现在我做
class WorkoutObserver < ActiveRecord::Observer
def after_update(workout)
workout = Workout.find(workout.id) if workout.is_a? QueuedWorkout
twitter_status = "some stuff " + short_url_for(workout) # Helper method for generating urls outside controllers & views
....
end
end
,当然这是一个可怕的解决方案。有没有更好的方法来告诉Rails路由器为QueuedWorkouts生成锻炼URL?
因为我已经切换到这一点,但宁愿有路由器自动复制路线。或跳过路由并在url_for中执行。 –