Skip to content

Instantly share code, notes, and snippets.

@pam-
Created June 25, 2014 01:21
Show Gist options
  • Save pam-/2255f1a98c1247760826 to your computer and use it in GitHub Desktop.
Save pam-/2255f1a98c1247760826 to your computer and use it in GitHub Desktop.
Error when I run specs: First argument in form cannot contain nil or be empty
<% if current_user?(@user) %>
<%= render 'shared/error_messages', object: f.object %>
<div class="title-area">
<%= f.text_field :title, placeholder: "Enter title..." %>
</div>
<div class="text-area">
<%= f.text_area :content, placeholder: "Compose new post..." %>
</div>
<%= f.submit "Post", class: "small-button", id: "post" %>
<% end %>
class ExperiencesController < ApplicationController
before_action :signed_in_user, only: [:index, :create, :destroy]
def index
@experiences = Experience.paginate(page: params[:page], per_page: 10)
end
def show
@experience = Experience.find(params[:id])
end
def create
@experience = current_user.experiences.build(experience_params)
if @experience.save
flash[:success] = "Post created!"
redirect_to @experience
else
flash.now[:error] = "Couldn't post!"
redirect_to current_user
end
end
def destroy
Experience.find(params[:id]).destroy
flash[:success] = "Successfully deleted!"
redirect_to current_user
end
private
def experience_params
params.require(:experience).permit(:content, :title)
end
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in." #flash[:notice]
end
end
end
module SessionsHelper
#chap 8.19
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.digest(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.digest(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def current_user?(user)
user == current_user
end
def signed_in_user
unless signed_in?
store_location
redirect_to signin_url, notice: "Please sign in." #flash[:notice]
end
end
def sign_out
current_user.update_attribute(:remember_token, User.digest(User.new_remember_token))
cookies.delete(:remember_token)
self.current_user = nil
end
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end
def store_location
session[:return_to] = request.url if request.get?
end
end
<% provide(:title, @user.name) %>
<div class="wrapper">
<div class="left">
<div id="username"><h1><%= link_to @user.name.upcase, @user %></h1></div>
<div id="sidebar">
<ul>
<% if signed_in? && current_user?(@user) %>
<li><%= link_to 'Settings', edit_user_path(@user, current_user), class: "small-button" %></li>
<li> <%= link_to 'Browse', '#', class: "small-button" %> </li>
<li> <%= link_to 'Sign out', signout_path, method: 'delete', class: "small-button" %></li>
<% else %>
<li> <%= link_to 'Follow', '#', class: "small-button" %> </li>
<% end %>
</ul>
</div>
</div>
<div class="right">
<div class="new-post">
<%= form_for(@experience) do |f| %>
<%= render 'shared/experience_form', f: f %>
<% end %>
</div>
<div class="posts-wrapper">
<% if @user.experiences.any? %>
<%= will_paginate @experiences %>
<ol>
<%= render @experiences %>
</ol>
<% end %>
</div>
</div>
</div>
class UsersController < ApplicationController
before_action :signed_in_user, only: [:index, :edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: [:destroy]
def index
@users = User.paginate(page: params[:page], per_page: 10)
end
def show
@user = User.find(params[:id])
@experience = current_user.experiences.build if signed_in?
@experiences = @user.experiences.paginate(page: params[:page], per_page: 10)
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
flash[:success] = "Welcome! Happy venting!"
else
render 'new'
end
end
def edit
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success] = "Successfully updated"
redirect_to @user
else
render 'edit'
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted."
redirect_to users_url
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation) #admin is not an option for security reasons
end
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
end
def admin_user
redirect_to(root_url) if !current_user.admin?
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment