Nic
Joined
Activity
Posted in CRUD on attribute in N/N join table
Thanks a lot for your answer.
Is there any simplier way to access that attribute that what I am doing ? I am sure yes.
<% @user.items.each do |i| %>
<%= i.user_items.where(:user_id => @user.id).first.quantity %>
<%= i.name %>
<% end %>
Also, when it comes to create this relationship, how to write the create call ?
Posted in CRUD on attribute in N/N join table
Hi!
I am struggling with a many to many relation to access an attribute stored in the join table.
I basically have two models :
- "User" which has_or_belongs_to_many :items
- "Item" which has_or_belongs_to_many :users
In between, I have a join table "items_users" created via migration, where I added an extra attribute "quantity".
In order to CRUD these entities, what should be the process ? I came across this topic https://stackoverflow.com/questions/25235025/rails-4-accessing-join-table-attributes/25238779#25238779 but I couldn't make it work.
I came to Rails from a Laravel background and we use to do this for the problem exposed (it is just to show by code what I could mistakely explain by words):
- In a model Item, I declare my relationship as such: public function users() { return $this->belongsToMany(User::class)->withPivot('quantity') }
Which allows me to fetch all users that have the item like so (and access the property in the join table): $item->users
- In a model User, I declare my relationship as such:
public function items()
{
return $this->belongsToMany(Item::class)->withPivot('quantity')
}
Which allows me to fetch all items that have the user like so (and access the property in the join table): $user->items
To create this relation in DB, we execute:
$user->items()->attach($item->id, ['quantity' => 10]);
To access the property in a datatable for example, after a loop on $user->items, we display the quantity via $item->pivot->quantity
Hope I have been concise enough to explain the problem, I am junior on RoR, so I may misuse the terminology of things.
Regards.