Rails 5 API: Return 多个属性值
Rails 5 API: Return multiple values for attribute
我正在制作一个 API 需要 return 给定属性的多个值。我有一个名为 User
的模型,用户可以喜欢不同类型的水果。用户只能喜欢葡萄,比如葡萄和苹果等。我不确定如何让用户喜欢不止一种水果。
这是我目前的情况:
class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :user do |t|
t.string :name
t.string :fruit
t.timestamps
end
end
end
我不确定是否应该将水果带入它自己的模型并制作它 belongs_to :user
因为我只需要水果的名称。在我的模型中只有一个属性会很奇怪。我正在考虑 returning 一个数组,但我不知道如何做,也不知道它是否是一个合适的 API 约定。
例如,如果用户喜欢葡萄和芒果,我想要一个 GET 到 /users/{:id}/fruits 到 return 葡萄和芒果。如果用户对 /user/{:id}/fruits 做了 POST 我想添加葡萄和芒果。
总而言之,我应该如何构建我的 migration/model 以便我可以 get/post 多个值到我的 api?
使用活动记录关联
http://guides.rubyonrails.org/association_basics.html
喜欢has_many
您可以通过声明一个附加的 table user_fruits 来实现这种结构,它具有联合主键 user_id 和 fruit_id。
rails g model UserFruit user:references fruit:references
然后进行迁移,这将在您的数据库中创建 user_fruits。
同时将 has_and_belongs_to_many :fruits
添加到 User
模型。并且 has_and_belongs_to_many :users
到 Fruit 模型。
UserFruit.create(:user_id => 1, :fruit_id =>1)
fruit_ids = [1,3,5,7]
fruit_ids.each do |f|
UserFruit.create(:user_id=>2, :fruit_id => f)
end
user = User.find(2)
user.fruits.pluck(:id) # 1,3,5,7
fruit = Fruit.first
ids_of_users_likes_this_fruit = fruit.users.pluck(:id) # 1,2
Also have a look at to this answer。方法是一样的。
我正在制作一个 API 需要 return 给定属性的多个值。我有一个名为 User
的模型,用户可以喜欢不同类型的水果。用户只能喜欢葡萄,比如葡萄和苹果等。我不确定如何让用户喜欢不止一种水果。
这是我目前的情况:
class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :user do |t|
t.string :name
t.string :fruit
t.timestamps
end
end
end
我不确定是否应该将水果带入它自己的模型并制作它 belongs_to :user
因为我只需要水果的名称。在我的模型中只有一个属性会很奇怪。我正在考虑 returning 一个数组,但我不知道如何做,也不知道它是否是一个合适的 API 约定。
例如,如果用户喜欢葡萄和芒果,我想要一个 GET 到 /users/{:id}/fruits 到 return 葡萄和芒果。如果用户对 /user/{:id}/fruits 做了 POST 我想添加葡萄和芒果。
总而言之,我应该如何构建我的 migration/model 以便我可以 get/post 多个值到我的 api?
使用活动记录关联 http://guides.rubyonrails.org/association_basics.html
喜欢has_many
您可以通过声明一个附加的 table user_fruits 来实现这种结构,它具有联合主键 user_id 和 fruit_id。
rails g model UserFruit user:references fruit:references
然后进行迁移,这将在您的数据库中创建 user_fruits。
同时将 has_and_belongs_to_many :fruits
添加到 User
模型。并且 has_and_belongs_to_many :users
到 Fruit 模型。
UserFruit.create(:user_id => 1, :fruit_id =>1)
fruit_ids = [1,3,5,7]
fruit_ids.each do |f|
UserFruit.create(:user_id=>2, :fruit_id => f)
end
user = User.find(2)
user.fruits.pluck(:id) # 1,3,5,7
fruit = Fruit.first
ids_of_users_likes_this_fruit = fruit.users.pluck(:id) # 1,2
Also have a look at to this answer。方法是一样的。