I am while leraning how to use association in rails 4 application I have a user having many opinions and I want to add user opinion in the book show page This is how i proceed:
my user.rb
class User < ActiveRecord::Base
 has_one :panier
 has_many :opinions
end
opinion.rb
class Opinion < ActiveRecord::Base
 belongs_to :user
end
views/books/show.html.erb
<h2>Votre opinion nous intéresse:</h2>
   <%= form_for([@user, @user.opinions.build]) do |f| %>
    <p>
      <%= f.label :body, 'votre opinion' %><br>
      <%= f.text_area :body %>
    </p>
    <p>
       <%= f.submit %>
    </p>
   <% end %>
opinion_controller.rb
class OpinionsController < ApplicationController
  def create
    @user = current_user
    @opinion= @user.opinion.create(opinion_params)
  end
  private
  def opinion_params
     params.require(:opinion).permit(:body)
  end
end
and in books_controllers this is my show method:
 def show
   @user= current_user
   @books= Book.all
 end
my routes:
get 'books/show' => 'books#show' , as: :books_list
resources :users do
  resources :opinions
end
what I got as error:
undefined method `opinions' for nil:NilClass
in this line of code:
                        
Most probably @user.opinions in your form causing this issue.
check whether current_user returning object or not.
Also in your create method there is typo(@user.opinion), it should be @user.opinions.
Use accept nested attributes for same.