In my application I want only current user to edit and delete his/her stuff
and for others stuff he just able to show it. I'm using devise with rails 4.

Here my files.

*Migration*

rails g migration AddUserIdToStudents user:references

*user.rb*

class User < ActiveRecord::Base
  has_many :students
end

*student.rb*

class Student < ActiveRecord::Base
  belongs_to :user
end

*student_controller.rb*

class StudentsController < ApplicationController
  before_action :authenticate_user!
  before_action :set_student, only: [:show, :edit, :update, :destroy]

  def index
  end

  # Branch wise students
  def mechanical
    @students = Student.where(Branch: "Mechanical Engineering")
  end
  def infomation_technology
    @students = Student.where(Branch: "Information Technology")
  end

  def new
    @student = current_user.students.build
  end

  def edit
  end

  def create
    @student = current_user.students.build(student_params)

    respond_to do |format|
      if @student.save
        format.html { redirect_to @student}
        format.json { render :show, status: :created, location: @student }
      else
        format.html { render :new }
        format.json { render json: @student.errors, status:
:unprocessable_entity }
      end
    end
  end

  private
    def set_student
      @student = Student.find(params[:id])
    end

    def student_params
      params.require(:student).permit( :University_Roll_Number, :avatar,
:Department_Type, :user_id)
    end
end

*_actions.html.erb*


<% @students.each do |student| %>

  <div class="card-action">

    <div class="center-align">

      <!-- If Statement -->

      <% if current_user.try(:admin?) %>

        <%= link_to student, :class=> "btn waves-light waves-effect grey
darken-4" do %>

          <span class="button-name">Show</span>

        <% end %>

        <%= link_to edit_student_path(student), :class=> "btn waves-light
waves-effect grey darken-4" do %>

          <span class="button-name">Edit</span>

        <% end %>

        <%= link_to student, method: :delete, data: { confirm: 'Are you
sure?' }, :class=> "btn waves-light waves-effect grey darken-4" do %>

          <span class="button-name">Delete</span>

        <% end %>

      <!-- Else If Statement -->

      <% elsif @student.user_id == current_user.id %>

        <%= link_to student, :class=> "btn waves-light waves-effect grey
darken-4" do %>

          <span class="button-name">Show</span>

        <% end %>

        <%= link_to edit_student_path(student), :class=> "btn waves-light
waves-effect grey darken-4" do %>

          <span class="button-name">Edit</span>

        <% end %>

        <%= link_to student, method: :delete, data: { confirm: 'Are you
sure?' }, :class=> "btn waves-light waves-effect grey darken-4" do %>

          <span class="button-name">Delete</span>

        <% end %>

      <!-- Else Statement -->

      <% else %>

        <%= link_to student, :class=> "btn waves-light waves-effect grey
darken-4" do %>

          <span class="button-name">Show</span>

        <% end %>

      <% end %>

    </div>

  </div>
<% end %>


With all that configuration I'm getting following error  undefined method
`user_id' for nil:NilClass. In my students table user_id is passing but
still facing this error. Where am I doing wrong.

-- 
Cheers!

Deepak Kumar Sharma
Guru Nanak Dev Engineering College
India!

Blog: http://deekysharma.wordpress.com

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/CALDHwN645aS0xXDDG0UqJLdNMjpM6atwNCvEgGpHHZAc7XWOKA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to