Ruby on rails 与Rail中的所有关联进行回应
我在应用程序中使用Rails作为后端。使用Ruby on rails 与Rail中的所有关联进行回应,ruby-on-rails,Ruby On Rails,我在应用程序中使用Rails作为后端。使用response_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])
response_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
我得到了这个,其中包括活动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
我只是得到了这个而没有它的练习
:
{"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
在第一种情况下,您只需要一项特定的活动—id为1的活动
(该活动附带了一整套“训练”)
在第二个操作中,您已按id要求进行一次特定训练。id为1
的训练
——这是您在json中收到的内容
这正是你要求的……;) 这就是我需要获得每个模型下所有关联的内容。我想如果没有它,每个模型都会在没有它的情况下出现。谢谢你的帮助
def as_json(options = {})
super(options.merge(include: :exercises))
end
训练中应该有练习
,但没有显示^^^这应该是你最初的问题的一部分(你认为这两种不同的动作有什么错并不明显)。你的活动
模型是否有包含
?Rails根据给定的嵌套路线推断活动
->训练
的嵌套结构(对于训练
->训练
),这似乎是合理的。。。不包括关联是Rails的标准。。。因此,要添加到Exercise
中,您需要添加一个includes
语句def as_json(options={})super(options.merge(include::exercises))end
这就解决了这个问题。谢谢