Reputation: 603
I have a Movie Model and an Actor Model:
class Movie < ActiveRecord::Base
mount_uploader :poster, PosterUploader
has_many :actors
accepts_nested_attributes_for :actors
end
class Actor < ActiveRecord::Base
belongs_to :movie
end
The Movie controller:
class MoviesController < ApplicationController
before_filter :set_movie, only: [:show, :edit, :update, :destroy]
def index
@movies = Movie.all
end
def show
@movie.actors.build
end
def new
@movie = Movie.new
@movie.actors.build
end
def create
@movie = Movie.new(movie_params)
if @movie.save
flash[:notice] = 'Movie Successfully Created'
redirect_to movie_path(@movie)
else
flash.now[:alert] = 'Invalid Movie Form'
render 'new'
end
end
.
.
.
private
def set_movie
@movie = Movie.find(params[:id])
end
def movie_params
params.require(:movie).permit(:title, :genre, :description, :duration, :release, :poster, actors_attributes: [:name])
end
end
and the show view:
<div id="show_movie_container">
<p><%= image_tag(@movie.poster_url, size: "300x400") %></p>
<p><%= @movie.title %> (<%= @movie.release %>)</p>
<p><%= link_to 'Edit', edit_movie_path %> | <%= link_to 'Delete', movie_path, method: :delete, data: { confirm: 'Are You sure you want to delete this movie?' } %></p>
<p>Duration: <%= @movie.duration %></p>
<p>Genre: <%= @movie.genre %></p>
<p>Actors: <%= @movie.actors.name %></p>
<p>Description: <%= @movie.description %></p>
</div>
The problem is every time I try to display the Actors on the view, I keep getting 'Actors: Actor' instead of the name I typed in when I submitted the form. When I look at my server logs I don't understand where the "0" is coming from in the actors_attributes hash:
"actors_attributes"=>{"0"=>{"name"=>"Christian Bale"}}
Not sure if that has anything to do with the problem.
When I go into the console and type 'm = Movie.last', and then type 'm.actors' I can successfully get back:
#<Actor:0x007fcd2890ab58> {
:id => 9,
:name => "Christian Bale",
:bio => nil,
:filmography => nil,
:created_at => Wed, 09 Sep 2015 16:02:55 UTC +00:00,
:updated_at => Wed, 09 Sep 2015 16:02:55 UTC +00:00,
:movie_id => 9
}
Just can't get the same back in the view.
I've been stuck on this for a couple hours and would greatly appreciate any help provided, thanks!
Upvotes: 0
Views: 42
Reputation: 33552
If I'm not wrong, you need to iterate through @movie.actors
like below and display the actors name
<% @movie.actors.each do |actor| %>
<p>Actors: <%= actor.name %></p>
<% end %>
Upvotes: 2