0

I'm new to Rails and I'm creating an Application where users can log in, and it dynamically generates a Table where they can make entries. I've managed to make the login but I don't realize how to create a table which is associated to a user.

My users_controller.rb class:

class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]

  # GET /users
  # GET /users.json
  def index
    @users = User.order(:name)
  end

  # GET /users/1
  # GET /users/1.json
  def show
  end

  # GET /users/new
  def new
    @user = User.new 
  end

  # GET /users/1/edit
  def edit
  end

  # POST /users
  # POST /users.json
  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to login_url, notice: "User #{@user.name} was successfully created." }
        format.json { render action: 'show', status: :created, location: @user }

#HERE I WOULD LIKE TO CREATE A TABLE ASSOSSIATED TO THE USER
        @rapport_table = User.rapport_table.create

      else
        format.html { render action: 'new' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /users/1
  # PATCH/PUT /users/1.json
  def update
    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to users_url, notice: "User #{@user.name} was successfully updated." }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /users/1
  # DELETE /users/1.json
  def destroy
    @user.destroy
    respond_to do |format|
      format.html { redirect_to users_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:name, :password, :password_confirmation)
    end
end

rapport_table.rb

class RapportTable < ActiveRecord::Base
    belongs_to :user
end

12341324123_create_rapport_tables.rb

class CreateRapportTables < ActiveRecord::Migration
  def self.up
    create_table :rapport_tables do |t|
      t.date :date
      t.text :description
      t.integer :time

      t.timestamps
    end
  end
  def self.down
    drop_table :rapport_tables
  end
end

show.html.erb

<p id="notice"><%= notice %></p>

<p>
  <strong>Name:</strong>
  <%= @user.name %>
</p>



<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>
2
  • 1
    I hope you don't want to actually create a db table for every new user. That's just... wrong. Commented Sep 13, 2013 at 22:54
  • how else should I do it? Commented Sep 13, 2013 at 22:56

1 Answer 1

1

You never, ever want to create tables inside a database in a runtime. Instead, you'll need to create some more models:

class RaportTable < ActiveRecord::Base
  belongs_to :user
  has_many :columns
  has_many :rows
end

class Column < ActiveRecord::Base
  # attr_accessible :name, :order
  belongs_to :raport_table
  has_many :cells
end

class Row < ActiveRecord::Base
  # attr_accessible :row_number
  belongs_to :raport_table
  has_many :cells
end

class Cell < ActiveRecord::Base
  # attr_accessible :value
  belongs_to :column
  belongs_to :row
end

This should be sufficient to start with.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.