我试图绕过Rails中的关联。我来自iOS开发背景。我认为我有一个基本的一对多工作,但我觉得我做错了,所以我在这里要求确认。
到目前为止,我有
class User < ApplicationRecord
has_many :cats
end
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
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可以执行上面显示的操作吗?
答案 0 :(得分:1)
这是获取相关记录的众多方法之一。你也可以
@user = User.find(params[:id])
@cats = @user.cats
<强> 或 强>
您还可以使用joins
或includes
@user_cats = User.joins(:cats)
<强> 或 强>
@user_cats = User.includes(:cats)