2016-04-21 4 views
0

Ich mache eine Organisatorwebsite, wo jemand ihre Klienten, Projekte, etc. organisieren kann. Aber technische Herausforderung treffend, scheint ich nicht zu wissen, wie man kommt herum (noch).SCHIENEN: Getrennte Benutzer, die den gleichen Inhalt anzeigen, wenn es anders sein sollte

Mein Ziel:

Separate Benutzer in ihrer eigenen Welt leben, wo sie ihre eigenen Kunden zu schaffen, die auf ihre Kunden Seite angezeigt werden, wenn sie angemeldet sind und an die Kunden Seite navigieren.

Aktuelle Challenge:

die DB für separate Benutzer über das Faker Juwel, getrennte Benutzer zeigen zur Zeit die gleichen Kunden-Liste in der Indexansicht nach der Aussaat, wenn sie den Kunden Seite navigieren, wenn ich hoffe, für sie haben unterschiedliche Zeichenfolgen aufgelistet (die verschiedene Kunden)

enter image description here

Was ich versucht:

Ich passe gerade RailsTutorial.org Chp11: Micropost Guide an mein Client-Szenario an und habe versucht, eine SHOW- und INDEX-Funktion im Client-Controller zu erstellen, bin aber immer noch ziemlich unscharf auf der gesamten GET/POST- und Controller-Aktionsszene, wo ich denke ich Ich treffe den technischen Block.

My-Code:

routes.rb

get 'password_resets/newedit' 

    root    'static_pages#home' 
    get 'about' => 'static_pages#about' 
    get 'signup' => 'users#new' 

    get 'login' => 'sessions#new' 
    #the page for new session 
    post 'login' => 'sessions#create' 
    #creates a new session 
    delete 'logout' =>'sessions#destroy' 
    #deletes the session 
    get 'clients' => 'clients#show' 

    resources :users 
    resources :account_activations, only: [:edit] 
    resources :password_resets,  only: [:new, :create, :edit, :update] 
end 

Clients.html.erb

<%= provide(:title, 'Clients') %> 

<div class="clients-container container"> 
    <div class="row"> 
     <!-- Add pagination later for multiple folders over multiple pages --> 
    <% if @user.clients.any? %> 
     <%= render @clients %> 
     <!-- render produces the following code: 
      from the partial file; 

      <div class="col-md-2 client-folder" style="margin: 10px" id="client - <%= client.id %>"> 
      <span class="clientName" ><%= client.client_name %></span> <br> 
      <span class="contactName"><%= client.contact_name %></span> 
      </div> 
     --> 

     <%= will_paginate @microposts %> 
    <% end %> 
    </div> 
</div> 

Clients_controller.rb

class ClientsController < ApplicationController 

    def show 
     @user = current_user 
     @clients = @user.clients.paginate(page: params[:page]) 
    end 
end 

User_controller.rb

class UsersController < ApplicationController 
    before_action :logged_in_user, only: [:index, :edit, :update, :destroy] 
    before_action :correct_user, only: [:edit, :update] #restricted areas 
    before_action :admin_user, only: :destroy 

    def index 
    @users = User.paginate(page: params[:page]) 
    end 

    def show 
    @user = User.find(params[:id]) 
    end 

    def new 
    @user = User.new 
    render :layout => 'signup.html.erb' 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     @user.send_activation_email 
     UserMailer.account_activation(@user).deliver_now 
     flash[:success] = "Welcome to focus. Please check your e-mail to activate your account." 
     redirect_to root_url 
    else 
     render 'new' 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
     #Handle a successful update. 
     flash[:success] = "Your information has been updated." 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    User.find(params[:id]).destroy # destroys users 
    flash[:success] = "Users deleted" 
    redirect_to users_url 
    end 
    private 

    #Confirms a logged-in user. 
    def logged_in_user 
     unless logged_in? 
     store_location 
     #While false... 
     flash[:danger] = "Please log in." 
     redirect_to login_url 
     end 
    end 

    #Confirms the correct user. 
    def correct_user 
     @user=User.find(params[:id]) 
     redirect_to(root_url) unless current_user?(@user) 
     #If another user gets access to one user's id# 
     #Rails gets the user profile id and tests it 
     #against the id of User logged in current 
    end  

    def user_params 
     # 'strong parameter' to prevent mass assignment vulnerability 
     # user_params privatize to limits external exposure 
     params.require(:user).permit(:name,:email, 
            :password,:password_confirmation) 
    end 

    # Confirms admin user 
    def admin_user 
     redirect_to(root_url) unless current_user.admin? 
    end 
end 

Teilbereich: seed.db

users = User.order(:created_at).take(3) 
50.times do 
    client_name = Faker::Lorem.characters(10) 
    contact_name = Faker::Lorem.characters(10) 
    contact_email = Faker::Lorem.characters(10) 
    contact_phone = Faker::Lorem.characters(10) 
    client_address = Faker::Lorem.characters(10) 
    users.each { |user| user.clients.create!(client_name: client_name, 
              contact_name: contact_name, 
              contact_email: contact_email, 
              contact_phone: contact_phone, 
              client_address: client_address) } 
    end 

Wenn Sie so freundlich sein würde, wie darauf zu hinweisen, was ich nicht sehe technisch würde es sehr geschätzt werden!

bearbeiten; Ich hoffe, dass weitere Bilder helfen: enter image description here

bearbeiten 2: Anbringen des endgültigen Arbeitscode für alle, die nützlich dank @GoGoCarl ‚s Eingang finden könnte:

braucht
users = User.order(:created_at).take(3) 
50.times do 
    users.each { |user| 
    client_name = Faker::Lorem.characters(10) 
    contact_name = Faker::Lorem.characters(10) 
    contact_email = Faker::Lorem.characters(10) 
    contact_phone = Faker::Lorem.characters(10) 
    client_address = Faker::Lorem.characters(10) 

    user.clients.create!(client_name: client_name, 
              contact_name: contact_name, 
              contact_email: contact_email, 
              contact_phone: contact_phone, 
              client_address: client_address) } 

    end 

Antwort

2

Ihre Seeding Schleife zu invertieren . Sie erstellen 50 Clients und für jede Gruppe iterieren Sie die Benutzer und fügen die Clients hinzu. Dies bedeutet, dass jeder Benutzer dieselbe Gruppe von Clients erhält.Nicht gleich nach ID, sondern nach Aussehen (Feldnamen). Jeder der drei Benutzer erhält einen Client mit den vorgegebenen Eigenschaften (Name, E-Mail usw.).

Stattdessen die Schleife invertieren; Iterieren Sie zuerst über jeden Benutzer, erstellen Sie dann für jeden Benutzer 50 Clients und fügen Sie diese 50 Clients diesem Benutzer hinzu.

Jetzt sollten alle Ihre Kunden voneinander getrennt sein, anstatt die gleichen Felder zu teilen.

Hinweis: Diese Schleife würde auch funktionieren, wenn Sie nicht Variablen zugewiesen haben, und genau das tun:


user.clients.create!(client_name: Faker::Lorem.characters(10), 
    contact_name: Faker::Lorem.characters(10), 
    contact_email: Faker::Lorem.characters(10), 
    contact_phone: Faker::Lorem.characters(10), 
    client_address: Faker::Lorem.characters(10)) 

Erstellen Sie dann jedes Mal aufgerufen wird, würde stattdessen eine neue Reihe von zufälligen Zeichen erzeugt. Dennoch denke ich, dass das Invertieren der Schleife den Code offensichtlicher macht. Aber das ist alles relativ!