Я новичок в рубинах на рельсах, и я немного застрял в том, что лучший следующий шаг в многоуровневом приложении, которое я создаю.Ruby on Rails - Показывать ресурсы по current_account
В основном я хочу обладать ресурсами по account_id, поэтому я создал метод и помощник, называемый current_account, в моем аккаунте base_controller.
Однако в учебном пособии я следую областям current_account по субдомену, который я не хочу делать. Поэтому мне нужно определить идентификатор account_id текущего пользователя, чтобы у меня могла быть переменная ресурса @contact = current_account.contacts. "All".
Нужно ли создать новую связь между моделью пользователя и учетной записи, чтобы я мог использовать помощник current_user для определения текущего идентификатора учетной записи или есть лучший способ? Если да, то каков наилучший способ сделать это?
Первый пользователь, который подписывается, становится владельцем учетной записи. Владельцы учетных записей могут затем пригласить других пользователей на счет. Я использую драгоценный камень. Ресурсы ограничены учетной записью, поэтому только пользователи, связанные с учетной записью, могут видеть записи, принадлежащие этой учетной записи.
Базовый контроллер
module Accounts
class BaseController < ApplicationController
def current_account
@current_account ||= ?????
end
helper_method :current_account
def owner?
current_account.owner == current_user
end
helper_method :owner?
end
end
Контакты (мой ресурс) Контроллер
module Accounts
class ContactsController < Accounts::BaseController
def index
@contact = current_account.contacts.all
end
end
end
Модель счета
class Account < ActiveRecord::Base
belongs_to :owner, class_name: "User"
accepts_nested_attributes_for :owner
validates :subdomain, presence: true, uniqueness: true
has_many :contacts
has_many :invitations
has_many :memberships
has_many :users, through: :memberships
end
Приглашение Модель
class Invitation < ActiveRecord::Base
belongs_to :account
validates :email, presence: true
end
Членство Модель
class Membership < ActiveRecord::Base
belongs_to :account
belongs_to :user
end
пользователя Модель
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
Маршруты
Rails.application.routes.draw do
devise_for :users
scope module: "accounts" do
resources 'dashboard'
resources 'contacts'
resources :invitations, only: [:new, :create] do
member do
get :accept
patch :accepted
end
end
resources :users, only: [:index, :destroy]
end
Схема
ActiveRecord::Schema.define(version: 20170124002015) do
create_table "accounts", force: true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "owner_id"
t.string "subdomain"
end
add_index "accounts", ["subdomain"], name: "index_accounts_on_subdomain"
create_table "contacts", force: true do |t|
t.string "first_name"
t.string "last_name"
t.string "phone"
t.string "email"
t.text "comments"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "account_id"
end
add_index "contacts", ["account_id"], name: "index_contacts_on_account_id"
create_table "invitations", force: true do |t|
t.string "email"
t.integer "account_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "token"
end
add_index "invitations", ["account_id"], name: "index_invitations_on_account_id"
add_index "invitations", ["token"], name: "index_invitations_on_token"
create_table "memberships", force: true do |t|
t.integer "account_id"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "memberships", ["account_id"], name: "index_memberships_on_account_id"
add_index "memberships", ["user_id"], name: "index_memberships_on_user_id"
create_table "users", force: true 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"
t.datetime "updated_at"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
Вы взглянули на этот драгоценный камень? https://github.com/elabs/pundit позволяет создавать политики для ваших пользователей. Я уверен, что вы можете взять его оттуда. – saadlulu
Спасибо. Похоже, это сработает для меня. Я собираюсь проверить это сейчас. –