user5494880
user5494880

Reputation:

Display rails join table field

So I am making an edit page that can edit animals and the owners to that animal. There is a join table involved which contains what Animal belongs to what Owner.

More precisely, Say you have:

<% form_for :animal, url: animal_path(@edit_animal), method: :patch do |edit| %>
... animal labels and fields to edit go here ...
    <%= edit.fields_for :owners do |owner| %>
        <%= owner.label :name, "Name" %>
        <%= owner.text_field :name %>
    <%end%>
    <%=edit.submit 'Submit'%>
<%end%>

Model Associations:

AnimalOwner < ApplicationRecord
    belongs_to :animal
    belongs_to :owner

Owner < ApplicationRecord
    has_many :animal_owners
    has_many :animals, :through => :animal_owners

Animal < ApplicationRecord
    has_many :animal_owners
    has_many :owners, :through => :animal_owners

Basically, I am not sure if I am doing the form correctly for join tables. I also wanted to be able to display the data currently saved in the database using :value, but what how I would do that for a join table?

<%= owner.text_field :name, :value => what_goes_here? %>

Upvotes: 0

Views: 101

Answers (1)

Vineeth
Vineeth

Reputation: 173

If you are doing the Rails way, you don't need to mention the value for existing database data.

<%= owner.text_field :name%>

This should populate the data to above given field. Also its always better to use a single for for both "new" and "edit" methods. And for "edit" you can also use "PUT" as method type.


To use the field_for tag, you will also need to tell your Animal model that it accepts_nested_attributes_for :owners. This will allow the nested params to be massed assigned to the Animal instance.

Upvotes: 1

Related Questions