Ruby on rails 与Rail中的所有关联进行回应

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])

我在应用程序中使用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])
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
这就解决了这个问题。谢谢