我有一個名爲update_mobile
的操作,並且在其中準備了大量用於RABL JSON請求的實例變量。你可以看到,如果請求包含params[:last_updated]
參數,那麼我只能得到自那時起已經更新的模型。這似乎違反了「胖模型,瘦控制器」的方法。我怎樣才能重構這個方法?如何重構Rails控制器操作以消除混亂?
def update_mobile
@last_updated = params[:last_updated]
if @last_updated.nil?
@buddies = @user.friends
@courses = @user.courses
@friendly_schools = @user.friendly_schools
@documents = @user.all_notes
@instructors = @user.current_instructors
@friendships = @user.friendships
@questions = @user.current_questions
@answers = @user.current_answers
@comments = @user.current_comments
else
@buddies = @user.friends.select{ |user| user.updated_at > @last_updated }
@courses = @user.courses.select{ |course| course.updated_at > @last_updated }
@friendly_schools = @user.friendly_schools.select{ |school| school.updated_at > @last_updated }
@documents = @user.all_notes.select{ |note| note.updated_at > @last_updated }
@instructors = @user.current_instructors.select{ |instructor| instructor.updated_at > @last_updated }
@friendships = @user.friendships.select{ |friendship| friendship.updated_at > @last_updated }
@questions = @user.current_questions.select{ |question| question.updated_at > @last_updated }
@answers = @user.current_answers.select{ |answer| answer.updated_at > @last_updated }
@comments = @user.current_comments.select{ |comment| comment.updated_at > @last_updated }
end
end
因爲關注更新我在鐵軌方面並不擅長。因此,請謹慎使用此建議:您可以在模型「def self.since_latest」中創建一個方法,並使用該方法的不同集合返回一個哈希值:'{:buddies => friends.select {...},courses => ....'。 您也可以傳遞'@ last_updated'並讓模型中的方法選擇返回哪些條目 – yas4891