获取连接表列的值

时间:2014-05-15 01:24:09

标签: ruby-on-rails api jointable

我正在创建一个包含用户和类的rails应用程序。这些课程是由教师,科目和时期组成的三向联接表。我在教室和用户之间建立了多对多的关系,这样教室可以拥有许多用户,用户可以拥有许多教室。

除了rails应用程序之外,我还创建了一个API,以便我的应用程序可以与iPhone应用程序进行交互。当我创建一个有几个教室的用户时,我的问题出现了。在轨道方面一切正常,因为对于每个教室,我可以通过classroom.subject(或相应的键)获得主题,教师或句点。当我使用API​​创建用户时,我正在尝试回应用户教室。

如果我只是@user.to_json(:include => :classrooms),它会回复一个教室对象,该对象只包含教师,科目和期间的ID。由于没有教室教师的能力,这是没有用的。我将如何回应课堂,包括主题,教师和期间对象?这样在IOS方面,我可以为类对象创建一个字典,并且只需与它进行交互,而无需为获取教师,主题和句点的值进行请求。

以下是我在创建用户时的回应:

format.json { render json: @user.to_json(:include => :classrooms) }

以下是教室的创建方式:

@classroom = Classroom.where(:teacher_id => @new_teacher.id,
                                              :period_id => @new_period.id,
                                              :subject_id => @new_subject.id).first_or_create

考虑到Threeve的回答并在我的回复中包含render :json => @user.to_json(:include => {:classrooms => [:teacher, :period, :subject]})后,我收到以下错误:

TypeError (no implicit conversion of Symbol into Integer):
  app/controllers/api/v1/user_controller.rb:103:in `block (2 levels) in create'
  app/controllers/api/v1/user_controller.rb:102:in `create'

1 个答案:

答案 0 :(得分:0)

您是否尝试将更深层次的关联链接到#to_json :include选项?

当你做这样的事情时会是什么样子?

format.json {
  render :json => @user.to_json(:include => {:classrooms => {:include => [:teacher, :period, :subject]}})
}

这应该可以为您提供教师/期间/科目关联的完整记录。

如果您想要明确显示或忽略哪些关联属性,请通过添加:only:except选项让选项更加难看:

format.json {
  render :json => resource.to_json(:include => { classrooms: {
    :include => {
      :teacher => {:only => [:first_name, :last_name]},
      :period => {:except => :time},
      :subject => {:only => :name}
    }
  }})
}

其他选项包括创建哈希然后将其转换为JSON,使用普通ERB呈现为JSON部分,或者使用RABL或JBuilder。

相关问题