Ruby on Rails
Monday, February 18, 2013
That is true. I'll probably change this.
This doesn't solve my problem though. I realize that I phrased myself a bit odd in my first post I will clarify below.
I have three models, User, Entry, Company
A user belongs to a company
An Entry belongs to the User who creates it.
An entry can also be assigned to another user (think of it like a task). So, I have these relationships in Entry:
belongs_to :user
belongs_to :assigned_user, class_name: "User"
The :assigned_user relationship should only be to a user who is related to the same company as :user. I validate it like this:
def assigned_user_must_be_in_company
if assigned_user.present? && assigned_user.company_id != user.company_id
errors.add(:assigned_user, "användaren måste tillhöra samma företag")
end
end
Which works OK.
But it would be nice to also have a constraint for this on the relation itself to get the correct users automatically etc.
Den måndagen den 18:e februari 2013 kl. 11:00:21 UTC+1 skrev Colin Law:
On 18 February 2013 09:44, Linus Pettersson <linus.pe...@gmail.com> wrote:
> Hi
>
> I have a model, let's call it entry, that belongs to a user. The user and
> the entry also belongs to a company.
>
> Can I add a condition on the belongs_to relations to check this?
>
> Something like:
> belongs_to :assigned_user, class_name: "User" , conditions: { company_id:
> company_id }
>
> This doesn't work because company is set on the Entry in the create action,
> like this:
> def create
> ...
> @entry.company = current_user.company
Why have you got Entry belongs_to company? If it also belongs_to user
and user belongs_to company then you can just say @entry.user.company.
If you want to be able to say @entry.company then you can use
delegate.
Colin
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/FIYU6TLuc8AJ.
For more options, visit https://groups.google.com/groups/opt_out.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment