has_one association through has_many with dynamic conditions - Rails
I have three tables:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group
end
class AssignmentsGroup
has_many :assignments
validate :uniqueness_of_keeper
end
Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper
association to AssignmentsGroup
given that all associated assignments will have the same keeper?
ruby-on-rails activerecord associations
add a comment |
I have three tables:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group
end
class AssignmentsGroup
has_many :assignments
validate :uniqueness_of_keeper
end
Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper
association to AssignmentsGroup
given that all associated assignments will have the same keeper?
ruby-on-rails activerecord associations
add a comment |
I have three tables:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group
end
class AssignmentsGroup
has_many :assignments
validate :uniqueness_of_keeper
end
Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper
association to AssignmentsGroup
given that all associated assignments will have the same keeper?
ruby-on-rails activerecord associations
I have three tables:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group
end
class AssignmentsGroup
has_many :assignments
validate :uniqueness_of_keeper
end
Assignments associated with a single assignment_group must have a single keeper. My question is: how can I add a has_one: keeper
association to AssignmentsGroup
given that all associated assignments will have the same keeper?
ruby-on-rails activerecord associations
ruby-on-rails activerecord associations
edited Nov 16 '18 at 3:16
dn1985
asked Nov 16 '18 at 1:16
dn1985dn1985
32
32
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup
and Assignment
should be, but try this:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group # will need to add a reference to the assignments table
end
class AssignmentsGroup
has_many :assignments
has_many :keepers, through: assignments
validate :single_keeper
private
def single_keeper
errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
end
end
See https://guides.rubyonrails.org/active_record_validations.html#custom-methods
whoops, forgot to add thebelongs_to
. Yes,Assignment belongs_to :assignment_group
. My question is how can I addhas_one :keeper
toAssignmentGroup
– dn1985
Nov 16 '18 at 3:18
@dn1985 you can't cause there are many keepers ifAssignmentsGroup
has_many :assignments
. But with a validation rule you should be able to add that constraint, which is what I tried to show above insingle_keeper
validation.
– Simon L. Brazell
Nov 16 '18 at 3:38
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330104%2fhas-one-association-through-has-many-with-dynamic-conditions-rails%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup
and Assignment
should be, but try this:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group # will need to add a reference to the assignments table
end
class AssignmentsGroup
has_many :assignments
has_many :keepers, through: assignments
validate :single_keeper
private
def single_keeper
errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
end
end
See https://guides.rubyonrails.org/active_record_validations.html#custom-methods
whoops, forgot to add thebelongs_to
. Yes,Assignment belongs_to :assignment_group
. My question is how can I addhas_one :keeper
toAssignmentGroup
– dn1985
Nov 16 '18 at 3:18
@dn1985 you can't cause there are many keepers ifAssignmentsGroup
has_many :assignments
. But with a validation rule you should be able to add that constraint, which is what I tried to show above insingle_keeper
validation.
– Simon L. Brazell
Nov 16 '18 at 3:38
add a comment |
Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup
and Assignment
should be, but try this:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group # will need to add a reference to the assignments table
end
class AssignmentsGroup
has_many :assignments
has_many :keepers, through: assignments
validate :single_keeper
private
def single_keeper
errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
end
end
See https://guides.rubyonrails.org/active_record_validations.html#custom-methods
whoops, forgot to add thebelongs_to
. Yes,Assignment belongs_to :assignment_group
. My question is how can I addhas_one :keeper
toAssignmentGroup
– dn1985
Nov 16 '18 at 3:18
@dn1985 you can't cause there are many keepers ifAssignmentsGroup
has_many :assignments
. But with a validation rule you should be able to add that constraint, which is what I tried to show above insingle_keeper
validation.
– Simon L. Brazell
Nov 16 '18 at 3:38
add a comment |
Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup
and Assignment
should be, but try this:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group # will need to add a reference to the assignments table
end
class AssignmentsGroup
has_many :assignments
has_many :keepers, through: assignments
validate :single_keeper
private
def single_keeper
errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
end
end
See https://guides.rubyonrails.org/active_record_validations.html#custom-methods
Sorry if I've misunderstood your problem as it's not clear what the association to between AssignmentGroup
and Assignment
should be, but try this:
class Keeper
has_many :assignments
end
class Assignment
belongs_to :keeper
belongs_to :assignment_group # will need to add a reference to the assignments table
end
class AssignmentsGroup
has_many :assignments
has_many :keepers, through: assignments
validate :single_keeper
private
def single_keeper
errors.add(:base, "can only have one keeper") unless keepers.uniq.length == 1
end
end
See https://guides.rubyonrails.org/active_record_validations.html#custom-methods
edited Nov 16 '18 at 3:57
answered Nov 16 '18 at 2:39
Simon L. BrazellSimon L. Brazell
51639
51639
whoops, forgot to add thebelongs_to
. Yes,Assignment belongs_to :assignment_group
. My question is how can I addhas_one :keeper
toAssignmentGroup
– dn1985
Nov 16 '18 at 3:18
@dn1985 you can't cause there are many keepers ifAssignmentsGroup
has_many :assignments
. But with a validation rule you should be able to add that constraint, which is what I tried to show above insingle_keeper
validation.
– Simon L. Brazell
Nov 16 '18 at 3:38
add a comment |
whoops, forgot to add thebelongs_to
. Yes,Assignment belongs_to :assignment_group
. My question is how can I addhas_one :keeper
toAssignmentGroup
– dn1985
Nov 16 '18 at 3:18
@dn1985 you can't cause there are many keepers ifAssignmentsGroup
has_many :assignments
. But with a validation rule you should be able to add that constraint, which is what I tried to show above insingle_keeper
validation.
– Simon L. Brazell
Nov 16 '18 at 3:38
whoops, forgot to add the
belongs_to
. Yes, Assignment belongs_to :assignment_group
. My question is how can I add has_one :keeper
to AssignmentGroup
– dn1985
Nov 16 '18 at 3:18
whoops, forgot to add the
belongs_to
. Yes, Assignment belongs_to :assignment_group
. My question is how can I add has_one :keeper
to AssignmentGroup
– dn1985
Nov 16 '18 at 3:18
@dn1985 you can't cause there are many keepers if
AssignmentsGroup
has_many :assignments
. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper
validation.– Simon L. Brazell
Nov 16 '18 at 3:38
@dn1985 you can't cause there are many keepers if
AssignmentsGroup
has_many :assignments
. But with a validation rule you should be able to add that constraint, which is what I tried to show above in single_keeper
validation.– Simon L. Brazell
Nov 16 '18 at 3:38
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330104%2fhas-one-association-through-has-many-with-dynamic-conditions-rails%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown