Rails: как автоматически запрашивать элементы, принадлежащие пользователю в сеансе?

Я разрабатываю приложение с помощью Rails 3.2.11 , и я использую Devise и CanCan.

Я устанавливаю разрешения в файле способность.rb , чтобы пользователь мог управлять только предметами, принадлежащими его компании, и все работает нормально.

  • Моя модель пользователя относится к модели компании.
  • Эта компания может иметь много моделей Клиентов.

Мне было интересно, есть ли способ автоматизировать мои запросы с областью или драгоценным камнем или что бы то ни было, поэтому каждый раз, когда я извлекаю через Client.all , он возвращает только клиентов, принадлежащих компании пользователя, или если я call Order.all показывает только заказы для своих корпоративных клиентов. Это возможно? Если нет, то какой будет лучший подход? Заранее большое спасибо.

0
nl ja de
Если вы хотите, чтобы Client.all возвращал только те клиенты, которые принадлежат компании пользователя, это кажется неправильным. По моему пониманию Client.all должен всегда возвращать все записи в таблице клиентов. Вы можете создать метод в модели пользователя или вы можете напрямую запросить current_user.company.clients .
добавлено автор Manoj Monga, источник

2 ответы

Надеюсь, я не недопонимаю, но как насчет написания метода?

Если вы хотите получить клиентские клиенты (принадлежащие компании-пользователям)

user.rb
def fetch_clients
  Clients.find_all_by_company(company) # your query here
end

в вашем контроллере вы могли бы просто:

@clients = @user.fetch_clients

и то же самое касается заказов

Благодаря SybariteManoj он отметил, что (если ваши запросы не сложнее):

@user.company.clients should return the same result
1
добавлено
Да, я должен добавить комментарий к ответу, но я не был уверен, что OP означает «это способ автоматизации моих запросов», я думал, что у него могут быть дополнительные/более сложные запросы. ти
добавлено автор wpp, источник
Почему я должен создать другой метод, поскольку у меня есть ассоциации? Не вернул бы тот же результат @ user.company.clients ?
добавлено автор Manoj Monga, источник
Без проблем. :) Я просто хотел удостовериться, что мы следуем основному правилу соглашения об использовании рельсов над конфигурацией. :)
добавлено автор Manoj Monga, источник
@SybariteManoj Я думаю, что я собираюсь использовать этот подход. Спасибо как за ваши ответы;)
добавлено автор bigardone, источник

CanCan имеет что-то, называемое доступным_by . Может быть, это то, что вы ищете?

Read more here: https://github.com/ryanb/cancan/wiki/Fetching-Records

0
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff