【问题标题】:Rails 5 API: Return multiple values for attributeRails 5 API:返回属性的多个值
【发布时间】:2016-07-26 16:20:30
【问题描述】:

我正在制作一个需要为给定属性返回多个值的 API。我有一个名为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,因为我只需要水果的名称。在我的模型中只有一个属性会很奇怪。我正在考虑返回一个数组,但我不知道如何,也不知道这是否是正确的 API 约定。

例如,如果用户喜欢葡萄和芒果,我希望对 /users/{:id}/fruits 进行 GET 以返回葡萄和芒果。如果用户对 /user/{:id}/fruits 进行了 POST,我想添加葡萄和芒果。

总之,我应该如何构建我的迁移/模型,以便我可以获取/发布多个值到我的 api?

【问题讨论】:

标签: ruby-on-rails ruby api ruby-on-rails-5


【解决方案1】:

使用 Active Record 关联 http://guides.rubyonrails.org/association_basics.html

喜欢has_many

【讨论】:

    【解决方案2】:

    您可以通过声明一个附加表 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 到水果模型。

    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    
    

    info 1 info 2

    Also have a look at to this answer。方法是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      相关资源
      最近更新 更多