2016-07-15 10 views
0

私はcurrent_userが売り手であるすべてのアイテムを返すAPIエンドポイントを設定する必要があります。私は私が持っているためので、RESTfulなルートを設定するために自分のベストをやっているこの:Rails、current_userが売り手であるすべてのアイテムを返すAPIエンドポイント?

routes.rbを

Rails.application.routes.draw do 
    resources :users 
    resources :items 
    get "users/:id/items" => "users#items" 
... 

users_controller.rbこれはseller_id列がのparamsに等しいすべての項目を返します

[:id]最終的には、itemsテーブルにbuyer_idカラムを追加して、それをフィルタリングできるようにしたいので、バイヤーと売り手を区別する必要があります。明らかに私はここでそれをやっていません。

class Item < ActiveRecord::Base 
    belongs_to :seller, :class_name => 'User', :foreign_key => 'seller_id' 
    enum status: {available: 0, pending: 1, sold: 2, expired: 3, banned: 4 } 
end 

user.rb

class User < ActiveRecord::Base 
    has_many :items, :class_name => 'Item', :foreign_key => 'seller_id' 
end 

schema.rb

ActiveRecord::Schema.define(version: 20160715043217) do 

    # These are extensions that must be enabled in order to support this database 
    enable_extension "plpgsql" 

    create_table "categories", force: :cascade do |t| 
    t.string "title" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "items", force: :cascade do |t| 
    t.string "title" 
    t.text  "description" 
    t.integer "price",   limit: 8 
    t.integer "status" 
    t.datetime "published_date" 
    t.datetime "created_at",    null: false 
    t.datetime "updated_at",    null: false 
    t.integer "seller_id" 
    end 

    add_index "items", ["seller_id"], name: "index_items_on_seller_id", using: :btree 

    create_table "users", force: :cascade do |t| 
    t.string "name" 
    t.decimal "latitude", precision: 9, scale: 6 
    t.decimal "longtitude", precision: 9, scale: 6 
    t.datetime "created_at",       null: false 
    t.datetime "updated_at",       null: false 
    end 

    add_foreign_key "items", "users", column: "seller_id" 
end 
+0

あなたは_buyer_をしたいし、動作していない_seller_たちを示します。私は今混乱している:)問題は何ですか? –

+1

実際の質問はありますか? –

+0

私は彼が売れた商品のために何をしているかに基づいて買った商品をどのように追加するのか混乱していると思います。 –

答えて

1

item.rb

class UsersController < ApplicationController 

    def seller_items 
     User.find(params[:id]).items 
    end 
end 

私は、各

のための別々のコントローラを持っているでしょうの

routes.rbを

get "users/:id/sold_items" => "sold_items#index" 
get "users/:id/bought_items" => "bought_items#index" 

コントローラ

class SoldItemsController 
    def index 
    User.find(params[:id]).sold_items 
    end 
end 

class BoughtItemsController 
    def index 
    User.find(params[:id]).bought_items 
    end 
end 

モデル

class User < ActiveRecord::Base 
    has_many :sold_items, :class_name => 'Item', :foreign_key => 'seller_id' 
    has_many :bought_items, :class_name => 'Item', :foreign_key => 'buyer_id' 
end 

class Item < ActiveRecord::Base 
    belongs_to :seller, :class_name => 'User', :foreign_key => 'seller_id' 
    belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer_id' 
    enum status: {available: 0, pending: 1, sold: 2, expired: 3, banned: 4 } 
end 
+0

すばらしい答え!ありがとう。 – matthewalexander

関連する問題