Commit 71f6435
Changed files (6)
app
spec
controllers
app/controllers/profiles_controller.rb
@@ -9,5 +9,21 @@ class ProfilesController < ApplicationController
@user = User.find_by(username: params[:id]) if @current_user.username == params[:id]
@program = Program.stronglifts
end
+
+ def update
+ @user = User.find_by(username: params[:id]) if @current_user.username == params[:id]
+ if @user.profile.update_attributes(profile_params)
+ flash[:notice] = "Updated profile. This is how your public profile appears."
+ redirect_to "/u/#{params[:id]}"
+ else
+ render 'edit'
+ end
+ end
+
+ private
+
+ def profile_params
+ params.require(:profile).permit(:gender, :social_tolerance)
+ end
end
app/models/user.rb
@@ -58,7 +58,7 @@ class User < ActiveRecord::Base
def create_profile
self.profile = Profile.create!(user: self)
- self.profile.social_tolerance = nil
+ self.profile.gender = self.profile.social_tolerance = nil
self.save!
end
app/views/profiles/edit.html.erb
@@ -3,25 +3,26 @@
<div class="small-12 columns text-center">
<%= gravatar_for(@user, size: 128) %>
<h1><%= @user.username %></h1>
- <%= form_for :profile do |f| %>
+ <%= form_for(:profile, method: :patch) do |f| %>
<fieldset>
<legend><%= t("profiles.edit.gender.gender") %></legend>
<%= radio_button_tag(:gender, "female") %>
- <%= label_tag(:gender_f, t("profiles.edit.gender.female")) %>
+ <%= label_tag(:gender_female, t("profiles.edit.gender.female")) %>
<%= radio_button_tag(:gender, "male") %>
- <%= label_tag(:gender_m, t("profiles.edit.gender.male")) %>
+ <%= label_tag(:gender_male, t("profiles.edit.gender.male")) %>
<%= radio_button_tag(:gender, "other") %>
- <%= label_tag(:gender_m, t("profiles.edit.gender.other")) %>
+ <%= label_tag(:gender_other, t("profiles.edit.gender.other")) %>
</fieldset>
<fieldset>
<legend><%= t("profiles.edit.social_tolerance.social_tolerance") %></legend>
<%= radio_button_tag(:social_tolerance, "low") %>
- <%= label_tag(:social_low, t("profiles.edit.social_tolerance.low")) %>
+ <%= label_tag(:social_tolerance_low, t("profiles.edit.social_tolerance.low")) %>
<%= radio_button_tag(:social_tolerance, "medium") %>
- <%= label_tag(:social_med, t("profiles.edit.social_tolerance.medium")) %>
+ <%= label_tag(:social_tolerance_medium, t("profiles.edit.social_tolerance.medium")) %>
<%= radio_button_tag(:social_tolerance, "high") %>
- <%= label_tag(:social_high, t("profiles.edit.social_tolerance.high")) %>
+ <%= label_tag(:social_tolerance_high, t("profiles.edit.social_tolerance.high")) %>
</fieldset>
+ <%= f.submit t("profiles.edit.save"), class: "button" %>
<% end %>
</div>
config/locales/en.yml
@@ -49,6 +49,7 @@ en:
medium: Medium
high: High
social_tolerance: Social Tolerance
+ save: Save Profile
show:
exercise_header: Exercise
maximum_achieved: Maximum Achieved
config/routes.rb
@@ -8,7 +8,7 @@ Rails.application.routes.draw do
end
end
resources :programs, only: [:show]
- resources :profiles, only: [:new, :create, :show, :edit], constraints: { id: /[^\/]+/ }
+ resources :profiles, only: [:new, :create, :show, :edit, :patch], constraints: { id: /[^\/]+/ }
get "/u/:id" => "profiles#show", constraints: { id: /[^\/]+/ }
get "/dashboard" => "training_sessions#index", as: :dashboard
get "/terms" => "static_pages#terms"
spec/controllers/profiles_controller_spec.rb
@@ -50,6 +50,23 @@ describe ProfilesController do
end
+ describe "#update" do
+ include_context "stronglifts_program"
+
+ let(:user) { create(:user) }
+
+ before :each do
+ http_login(user)
+ end
+
+ it "updates the user profile" do
+ patch :update, id: user.to_param, profile: {gender: "male"}
+ user.reload
+ expect(user.profile.gender).to eql("male")
+ end
+
+ end
+
end
describe "unauthenticated" do