导致一对多的混乱

时间:2016-03-20 12:43:00

标签: ruby-on-rails

我试图绕过Rails中的关联。我来自iOS开发背景。我认为我有一个基本的一对多工作,但我觉得我做错了,所以我在这里要求确认。

到目前为止,我有

user.rb

class User < ApplicationRecord
  has_many :cats
end

cat.rb

class Cat < ApplicationRecord
  belongs_to :user, optional: true
end

我已经像这样生成了我的迁移:

rails generate migration add_user_to_cats user:references

迁移文件

class AddUserToCats < ActiveRecord::Migration[5.0]
  def change
    add_reference :cats, :user, foreign_key: true
  end
end

Route.rb

Rails.application.routes.draw do
  resources :cats
  resources :users
  get '/users/:id/cats', to: 'users#user_cats'
  get '/adopt/:id', to: 'users#adopt'
end

例如,当用户转到localhost:3000/users/1/cats时,它会执行我的控制器方法:

def user_cats
  cats = Cat.where(user_id: params[:id])
  render json: cats
end

问题

首先,这是为用户提取所有猫的正确方法吗?

感觉不对......

来自iOS开发背景并使用CoreData,我习惯于能够做到这样的事情:

cats = user.cats

user = cat.owner

但我最初遇到的Ruby on Rails和ActiveRecords似乎并没有这么说。

Rails可以执行上面显示的操作吗?

1 个答案:

答案 0 :(得分:1)

这是获取相关记录的众多方法之一。你也可以

@user = User.find(params[:id])
@cats = @user.cats

<强>

您还可以使用joinsincludes

@user_cats = User.joins(:cats)

<强>

@user_cats = User.includes(:cats)