Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6158847
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T21:01:49+00:00 2026-05-23T21:01:49+00:00

I will try to explain this very simple. So, I skipped any code which

  • 0

I will try to explain this very simple. So, I skipped any code which is not necessary to illustrate the problem.

Let’s assume a model:

class Model < ActiveRecord::Base

  # Join class storing grants for users, e.g. 'admin', 'default'
  has_many :user_grants

  # Grant a user a certain grant
  def grant_user(user, grant)
    self.user_grants.build(:user => user, :grant => grant)
  end

  # Some action is done by a user, but ensure user has required grants
  def action(user, action_type)
     unless user_grants.find_by_user_id_and_grant(user, GrantEnum::ADMIN)
        raise ModelUserNotAllowedError.new
     end
     ...action code...
  end

I skipped the code for User and some other models because they are not relevant to illustrate…

We instantiate the code:

  1: @model = Model.new
  2: @user = User.new
  3: @model.grant_user(@user, GrantEnum::ADMIN)
  4: @model.action(@user, ActionEnum::SOMETHING)

Line 4. will raise a ModelUserNotAllowedError because the required grant build in line 3 is not persisted at this time, but finder methods only work on persisted data. From a logical point of view, the error shouldn’t be raised because the user is suffiecent granted.

I am using self.user_grants.build because the Model may not be persisted when calling grant_user.

So, what are the options to get this working:

1.) Implement code that only uses association.create instead of association.build to ensure finder methods are “up-to-date”. This also requires to save parents first.

2.) Implement code that checks both persisted data by using finder methods and non-persisted data by looping through the assication, e.g. given the above example, one may do to check non-persisted data:

  user_grants.each do |user_grant|
    if user_grant.grant.eql?(GrantEnum::ADMIN)
      return true
    end
  end

However, proposal number 2 seems to be a bad idea. So, let’s forget it…

Are there any other options? e.g. Is there a way to get finder methods to check non-persisted data as well? Hope to get some new insights…

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T21:01:49+00:00Added an answer on May 23, 2026 at 9:01 pm
    unless user_grants.select {|user_grant| user == user && grant == GrantEnum::ADMIN}.present?
            raise ModelUserNotAllowedError.new
    end
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I think this may not be possible, will try and explain as best as
This might be a little hard to explain, but I will try. I want
I will try and explain this as concise as possible. I have 2 objects,
sorry for asking this dumb question i will try to explain as good as
Ok I will try to explain this as much as possible. I have a
I'm fairly new to C# but I will try to make this quick! ;)
I am about to try and automate a daily build, which will involve database
I will try to explain what I want to accomplish. I am looking for
The title is pretty weak, but I will try to explain here. I am
I am working on an algorithm that will try to pick out, given an

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.