mercredi 22 février 2017

How to write the active record query

I have three models in context of this question:

class ClearanceBatch < ActiveRecord::Base    
    has_many :items
    belongs_to :user
end

class Item < ActiveRecord::Base

  belongs_to :style
  belongs_to :user
  belongs_to :clearance_batch
  validates :id, :uniqueness => true
end

class User < ActiveRecord::Base

    has_many :items, dependent: :destroy
    has_many :clearance_batches, dependent: :destroy    
    enum role: {staff: 0, vendor: 1, admin: 2}           

end

Schema:

    create_table "clearance_batches", force: :cascade do |t|
        t.datetime "created_at"
        t.datetime "updated_at"
        t.boolean  "status",     default: false
        t.string   "boughtby",   default: ""
        t.integer  "user_id"
      end

      add_index "clearance_batches", ["user_id"], name: "index_clearance_batches_on_user_id"

      create_table "items", force: :cascade do |t|
        t.string   "size"
        t.string   "color"
        t.string   "status"
        t.decimal  "price_sold"
        t.datetime "sold_at"
        t.integer  "style_id"
        t.datetime "created_at"
        t.datetime "updated_at"
        t.integer  "clearance_batch_id"
        t.integer  "user_id"
      end



 create_table "users", force: :cascade do |t|
        t.string   "email",                  default: "", null: false
        t.string   "encrypted_password",     default: "", null: false
        t.string   "reset_password_token"
        t.datetime "reset_password_sent_at"
        t.datetime "remember_created_at"
        t.integer  "sign_in_count",          default: 0,  null: false
        t.datetime "current_sign_in_at"
        t.datetime "last_sign_in_at"
        t.string   "current_sign_in_ip"
        t.string   "last_sign_in_ip"
        t.datetime "created_at",                          null: false
        t.datetime "updated_at",                          null: false
        t.integer  "role",                   default: 0
      end

I want to find all items in a batch of the currently logged in user(mainly vendor) with the status "clearanced", and get their details in a loop from controller to my view

Can anyone please help me out with the active record query? Please! :)

The SQLite Query I think would be:

Select I.id from clearance_batches C INNER JOINS Items I on C.id = I.clearance_batch_id where C.user_id = "1" and I.status = "clearanced"

(If 1 is the current user, keeping in mind I am only allowing user of role vendors to be a user in clearance_batch table)

Aucun commentaire:

Enregistrer un commentaire