Question

So just got some help on this, but now have a new issue...I'm trying to list all of the 'commits' (these are basically simple edits) for a certain project. This is currently working but when I try to list the user who created the commit it is showing the wrong user profile picture (or name, etc). What is happening is the person who created the project is currently also the user_id for all commits.

i.e, User A creates the project...then User B comes and adds a commit. But its showing User A as the profile pic for ALL commits for some reason, and I can't quite figure out why. This must have something to do with the 'new' or 'create' methods for commits because its always associating the new commit with the user who created the project (when it should be associating the commit with the current_user).

Thanks in advance for any help...

COMMITS CONTROLLER

class CommitsController < ApplicationController
  before_action :find_project

  def new
    @commit = @project.commits.build(user_id: @project.user_id) 
  end

  def show
    @project = Project.find(params[:project_id])
    @commit = Commit.find(params[:id])
  end

  def index
    # @user = User.where(:id => @commit.user_id) first figure out how to set user_id on new commits (its nil now)
    @commits = Commit.paginate(page: params[:page])
  end

  def create
    @project = Project.find(params[:project_id])
    @commit = @project.commits.build(commit_params)
    if @commit.save
      flash[:success] = "You've successfully committed to this project"
      redirect_to project_path(@project)
    else
      render 'new'
    end
  end

  def edit

  end

  def update

  end

  def destroy

  end

  private

    def find_project
      @project = Project.find(params[:project_id])
    end

    def commit_params
      params.require(:commit).permit(:title, :project_id, :user_id)
    end
end

NEW.HTML.ERB (NEW COMMITS FORM)

<div class="row-fluid">
  <div class="col-md-5 no-pad">
    <h1>Commit a new session file to this project repository</h1>
    <%= bootstrap_form_for @commit, :url => project_commits_path do |f| %>

      <%= render 'shared/error_messages', object: f.object %>

      <%= f.text_field :title %>

      <%= f.hidden_field :user_id %>

      <div class="well">
        <h4>Drag and Drop a file here:</h4>
        <%= image_tag("wavicon-large-grey.png", alt: "add file") %>
      </div>

      <%= f.button "Commit Now! ", class: "btn btn-lg btn-primary" %>
    <% end %>
  </div>
  <div class="col-md-1">
    <%= image_tag "shadow-vert.png" %>
  </div>

</div>

INDEX.HTML.ERB (list of project commits showing incorrect user profile pic)

<% provide(:title, @commits ) %>

<div class="row-fluid">
  <section class="no-pad col-md-9">

    <%= render :partial => '/projects/project_header' %>

    <h4>Commit History</h4>

    <%= will_paginate %>

    <ul class="commits">

      <% @project.commits.first(5).each do |commit| %> 

        <%= render partial: "commit", object: commit %>

      <% end %>
    </ul>

    <%= will_paginate %>

  </section>

</div>

_COMMIT.HTML.ERB PARTIAL (referenced above)

<li>
  <%= link_to project_commit_path(@project, commit) do %>
    <h6><%= image_tag commit.user.image_url(:thumb).to_s, :class => "profile-pic-thumb" %><%= commit.title %>...</h6>
    <span class="timestamp pull-right">
      Created <%= time_ago_in_words(commit.created_at) %> ago
      <span class="glyphicon glyphicon-time"></span>
    </span>

  <% end %>
</li>

Where am I going wrong? This code below should be showing the user who created the 'commit'...not the user who created the 'project'.

<h6><%= image_tag commit.user.image_url(:thumb).to_s, :class => "profile-pic-thumb" %><%= commit.title %>...</h6>
Was it helpful?

Solution

Update the new action as below:

  def new
    @commit = @project.commits.build(user_id: current_user.id) 
  end

Use current_user.id instead of @project.user_id. This way the new commit record would be created with currently logged in user's id instead of the user id of person who created the project.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top