2013-09-13 4 views
0

Я новичок в Rails и создаю приложение, в котором пользователи могут войти в систему, и динамически генерирует таблицу, в которой они могут вносить записи. Мне удалось сделать логин, но я не понимаю, как создать таблицу, связанную с пользователем.Ruby on Rails 4, динамически создавать таблицу для каждого пользователя

Мой users_controller.rb класс:

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 %> 
+0

Надеюсь, вы не хотите создавать таблицу db для каждого нового пользователя. Это просто ... неправильно. – BroiSatse

+0

как еще я должен это делать? – LxSwiss

ответ

0

Вы никогда не хотите создавать таблицы внутри базы данных во время выполнения. Вместо этого вам нужно будет создать еще несколько моделей:

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 

Этого должно быть достаточно для начала.

Смежные вопросы