has_many and belongs_ association rails 4

69 views Asked by At

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:

1

There are 1 answers

1
Ashutosh Tiwari On BEST ANSWER

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.