2016-06-24 8 views
0

zur Zeit habe ich das Modell commodity_group, es gibt created_by und updated_by Spalten drin. Es gehört dem Benutzer und ein Benutzer hat Warengruppen. Nun möchte ich, wenn ein Benutzer eine Warengruppe erstellt hat, seine ID in created_by speichern, und wenn jemand eine Warengruppe aktualisiert, wird seine ID im Feld update_by gespeichert. Im Moment bekomme ich diesen Fehler:speichere current_user.id in eine andere Spalte

unknown attribute 'user_id' for CommodityGroup.

im Grunde, ich will nicht die Spalte user_id auf die commodity_group Tabelle hinzuzufügen, da sie das gleiche mit der Säule created_by ist. Könnte also jemand mich hier ein wenig führen? Hier sind meine Dateien:

commodity_groups_controller.rb:

class CommodityGroupsController < ApplicationController 
    before_action :set_commodity_group, only: [:show, :edit, :update, :destroy] 

    # GET /commodity_groups 
    def index 
    @commodity_groups = CommodityGroup.all 
    end 

    # GET /commodity_groups/1 
    def show 
    end 

    # GET /commodity_groups/new 
    def new 
    @commodity_group = current_user.commodity_groups.build 
    end 

    # GET /commodity_groups/1/edit 
    def edit 
    end 

    # POST /commodity_groups 
    def create 
    @commodity_group = current_user.commodity_groups.build(commodity_group_params) 


    if @commodity_group.save 
     redirect_to commodity_groups_path, notice: init_message(:success, t('message.new_success', page_name: t('page_name.commodity_group'))) 
    else 
     redirect_to new_commodity_group_path, notice: init_message(:error, t('message.new_error', page_name: t('page_name.commodity_group'))) 
    end 
    end 

    # PATCH/PUT /commodity_groups/1 
    def update 
    if @commodity_group.update(commodity_group_params) 
     redirect_to @commodity_group, notice: 'Commodity group was successfully updated.' 
    else 
     render :edit 
    end 
    end 

    # DELETE /commodity_groups/1 
    def destroy 
    @commodity_group.destroy 
    redirect_to commodity_groups_url, notice: 'Commodity group was successfully destroyed.' 
    end 

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

    # Only allow a trusted parameter "white list" through. 
    def commodity_group_params 
     params[:commodity_group] 
    end 
end 

commodity_group.rb:

class CommodityGroup < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :code, use: :history 

    belongs_to :user_created, 
      class_name: 'User', 
      primary_key: :id, 
      foreign_key: :created_by 
    belongs_to :user_updated, 
      class_name: 'User', 
      primary_key: :id, 
      foreign_key: :updated_by 

    validates_presence_of :code 
    validates_presence_of :name 
    validates_presence_of :user 
end 

user.rb:

class User < ActiveRecord::Base 
    extend FriendlyId 
    include Filterable 

    friendly_id :slug_candidates, use: :history 
    has_secure_password 
    acts_as_paranoid 

    has_many :activities 
    has_many :pricing_histories 
    has_many :commodity_groups 
end 

Antwort

0

CommodityGroup sucht nach user_id in commodity_groups Tabelle.

Sie müssen dies im User Modell angeben.

class User < ActiveRecord::Base 
    extend FriendlyId 
    include Filterable 

    friendly_id :slug_candidates, use: :history 
    has_secure_password 
    acts_as_paranoid 

    has_many :activities 
    has_many :pricing_histories 
    has_many :commodity_groups_created, class_name: 'CommodityGroup', 
             foreign_key: :created_by 
    has_many :commodity_groups_updated, class_name: 'CommodityGroup', 
             foreign_key: :updated_by 
end 
+0

danke für Ihre Hilfe. Obwohl ich die Spalte current_user.id immer noch nicht in der Spalte created_by in der Tabelle commodity_group speichern konnte, möchte ich dennoch Ihre Lösung als die beste markieren. Ich werde eine andere Frage für mein aktuelles Problem stellen. Haben Sie einen guten Tag. –

0

Sie die foreign_key auf der CommodityGroup Seite haben, müssen Sie nur an die Benutzerseite als auch hinzufügen, und Sie sollten gehen zB gut sein:

has_many :commodity_groups, class_name: 'User', foreign_key: :created_by 

(Sie müssen mit den Details jigger kann herauszufinden, was Sie noch hinzufügen müssen, aber das wird Ihnen im Grunde die Idee, wie man es lösen kann)

+0

Vielen Dank für Ihren Vorschlag. Also, ich muss das created_by Feld auch zur Benutzertabelle hinzufügen? –

+0

Nein - das created_by-Feld existiert bereits in der anderen Tabelle ... aber Rails wird standardmäßig den Klassennamen verwenden, um den Feldnamen herauszufinden, und in diesem Fall wird nach einem Feld mit dem Namen 'user_id' gesucht - das nicht existiert auf deinem anderen Tisch ... also musst du es sagen, was der Feldname wirklich ist –

+0

ja, ich habe verstanden, was du meinst. Eigentlich hat Mr. Deepack die Lösung gefunden, nach der ich suche, und vielen Dank. Einen schönen Tag noch. –

Verwandte Themen