2016-07-26 11 views
0

私は与えられた属性に対して複数の値を返さなければならないAPIを作っています。私はUserというモデルを持っており、ユーザーはさまざまな種類の果物を好きになることができます。ユーザーはブドウやりんごなどのブドウしか好きではありません。ユーザーが複数の果物を好きになる方法を私は確信しています。ここでRails 5 API:属性の複数の値を返します

は、私がこれまで持っているものです。

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作る必要がある場合、私はわかりませんよ。私のモデルには1つの属性しか持たないのは変です。私は配列を返すことを考えていましたが、どのようにすればよいのかわかりません。そして、それが適切なAPI規約であるかどうかわかりません。

たとえば、ユーザーがブドウやマンゴーを好きだった場合、/ users/{:id}/fruitsにGETしてブドウとマンゴを返すようにします。ユーザーが/ user/{:id}/fruitsにPOSTをした場合、私はブドウとマンゴーを追加したいと思います。

結論として、私は自分のAPIに複数の値を取得/ポストするためにマイグレーション/モデルをどのように構造化すればよいですか?

+0

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association – lcguida

答えて

1

使用にhas_many

0

などのActive Recordのアソシエーション http://guides.rubyonrails.org/association_basics.html

あなたは共同主キー、USER_IDとfruit_idを持っている追加のテーブルuser_fruitsを宣言することで、構造物のようなものを達成することができます。

rails g model UserFruit user:references fruit:references 

次に、マイグレーションを実行すると、データベースにuser_fruitsが作成されます。 has_and_belongs_to_many :fruitsUserモデルを追加してください。フルーツモデルhas_and_belongs_to_many :users

info 1 info 2

Also have a look at to this answer

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  

。アプローチは同じです。

関連する問題