2017-03-14 49 views
0

的關聯,我使用Rails在我的應用程序的後端。使用respond_with返回show行動ActivityWorkout模型。respond_with所有在軌

關係:

Activity has_many Workouts 
Workout has_many Exercises 
... belongs_to ... 

控制器鍛鍊:

def show 
    respond_with Workout.find(params[:id]) 
end 

控制器的活動:

def show 
    respond_with Activity.find(params[:id]) 
end 

路線:

   exercises GET /exercises(.:format)       exercises#index 
        POST /exercises(.:format)       exercises#create 
      exercise GET /exercises/:id(.:format)      exercises#show 
    activity_workouts GET /activities/:activity_id/workouts(.:format)  workouts#index 
        POST /activities/:activity_id/workouts(.:format)  workouts#create 
    activity_workout GET /activities/:activity_id/workouts/:id(.:format) workouts#show 
      activities GET /activities(.:format)       activities#index 
        POST /activities(.:format)       activities#create 
      activity GET /activities/:id(.:format)      activities#show 

在瀏覽器中,我在下面的輸入:

http://localhost:3000/activities/1.json 

我得到這個,這包括所有Workouts本次活動1下:

{"id":1,"title":"Climbing","description":"climbing 1","created_at":"2017-03-13T17:48:30.220Z","updated_at":"2017-03-13T17:48:30.220Z","user_id":1,"workouts":[{"id":1,"name":"workout 1","description":"workout2","activity_id":1,"created_at":"2017-03-13T17:59:45.742Z","updated_at":"2017-03-13T17:59:45.742Z"},{"id":2,"name":"workout 2","description":"description 2","activity_id":1,"created_at":"2017-03-13T19:27:57.601Z","updated_at":"2017-03-13T19:27:57.601Z"},{"id":3,"name":"workout 3","description":"description 3","activity_id":1,"created_at":"2017-03-13T20:53:53.191Z","updated_at":"2017-03-13T20:53:53.191Z"},{"id":4,"name":"workout 4","description":"des 4","activity_id":1,"created_at":"2017-03-13T20:55:15.965Z","updated_at":"2017-03-13T20:55:15.965Z"}]} 

但是,當我輸入:

http://localhost:3000/activities/1/workouts/1.json 

我只是在它得到這個沒有exercises

{"id":1,"name":"workout 1","description":"workout2","activity_id":1,"created_at":"2017-03-13T17:59:45.742Z","updated_at":"2017-03-13T17:59:45.742Z"} 

我不能告訴的是這兩個動作之間的差異。

解決方案:

添加這下model.rb

def as_json(options = {}) 
    super(options.merge(include: :exercises)) 
    end 

回答

-1

在第一,你所要求的只是一個特定的活動 - 在Activity ID爲1(這恰好也有一套完整的「鍛鍊」)。

在您所要求的ID一個特定的鍛鍊第二個動作。該Workout1的ID - 這是你在JSON

它做的正是你問什麼......正在接受什麼;)

+0

應該有'下鍛鍊exercies',但他們沒有表現出 – Leogoesger

+0

^^這應該是你原來的問題的一部分(這一點不明確你以爲看錯了兩個不同的動作)。 –

+1

你的'活動'模型有一個'includes'的地方嗎? Rails根據給定的嵌套路由(這不是'Workout' - >'Exercise')推斷「Activity」 - >'Workout'的嵌套結構,這是*貌似合理的。導軌標準......所以要在'Exercise'你將需要添加一個'includes'聲明 –

1

這是我需要得到每個模型下的所有協會。我想如果沒有它,每個模型都會在沒有它的情況下出現。感謝您的幫助!

def as_json(options = {}) 
    super(options.merge(include: :exercises)) 
    end