2016-09-21 14 views
0

ich auf zwei einfachen Modell arbeitenRails Association, nicht definierte Methode

class Permit < ApplicationRecord 
    belongs_to :user, optional: true 
    validates :user_id, presence: true 
end 

class User < ApplicationRecord 
    has_many :permits 
    has_secure_password 
end 

Im Schienenkonsole, ich tue das folgende

user = User.find(10) 

, die die ein Benutzerobjekt Benutzer zuweisen. Aber wenn ich eine Genehmigung für den Benutzer erstellen möchten gibt es diesen Fehler

NoMethodError in PermitsController#create 
undefined method `Permit' for #<User:0xaaa3528> 

Wie dieses Problem zu lösen? Vielen Dank!

Das ist mein permit_controller, die das Problem, das ich Aktion

class PermitsController < ApplicationController 
    before_action :set_permit, only: [:show, :destroy] 
    def index 
    @permits = Permit.all 
    end 

    def new 
    @permits = Permit.new 
    end 

    def create 
    @permits = user.permits.create(permit_params) 

    if @permits.save 
     redirect_to @permits 
     else 
     redirect_to contact_path 
     end 

    end 

    def destroy 
    Permit.destroy_all(user_id: 1) 
    respond_to do |format| 
     format.html { redirect_to users_url, notice: 'Permit was successfully canceled.' } 
     format.json { head :no_content } 
    end 
    end 

    def show 
    @permits = Permit.find(params[:id]) 
    end 

    def update 
    respond_to do |format| 
     if @permits.update(user_params) 
     format.html { redirect_to @user, notice: 'Permit was successfully updated.' } 
     format.json { render :show, status: :ok, location: @user } 
     else 
     format.html { render :edit } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

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

    # Never trust parameters from the scary internet, only allow the white list through. 
    def permit_params 
    params.require(:permit).permit(:vehicle_type, :name, :studentid, :department, :carplate, :duration, :permitstart, :permitend) 
    end 
end 

Permit/neu/html.erb

<% provide(:title, 'New Permit') %> 
<h1>Permit Application</h1> 

<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= form_for(@permits) do |f| %> 

     <%= f.label :"Vehicle" %> 
     <%= f.text_field :vehicle_type, class: 'form-control' %> 

     <%= f 

.label CREATE glauben: "License Plate" %> <% = f.text_field: carplate, Klasse: 'form-control'%>

<%= f.label :"Student ID" %> 
    <%= f.text_field :studentid, class: 'form-control' %> 

    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 

    <%= f.label :"Department of applicant" %> 
    <%= f.text_field :department, class: 'form-control' %> 

    <%= f.label :permit_start %> 
    <%= f.date_select :permitstart, class: 'form-control' %> 

    <%= f.label :permit_end %> 
    <%= f.date_select :permitend, class: 'form-control' %> 


    <%= f.submit "Submit", class: "btn btn-primary" %> 
<% end %> 

+0

können Sie den Code, den Sie verwendet haben, um eine Genehmigung zu erstellen. das wäre sehr relevant Info – Ren

+0

Ich habe meine Frage aktualisiert :) –

Antwort

0

Sie haben die Erlaubnis zu erstellen, wie folgt:

user.permits.create(..) 
+0

Immer noch der gleiche Fehler :( –

+0

Kannst du deine 'Erlaubnis' creation code? –

+0

Ich habe meine Frage aktualisiert :) –

0

Sie setzen before_action :set_permit, only: [:show, :destroy], dass Sie nur bedeuten @permits verwenden können (sollten singulär) in diesen zwei Methoden, ich sehe, Sie verwenden @permits in aktualisieren. Ich habe nicht gesehen, dass Sie user_id für permit_params zulassen.

In create @permits = user.permits.create(permit_params) haben Sie Benutzer nicht deklariert. Sie setzen before_action :set_permit, only: [:show, :destroy], also warum nicht @permits.destroy

belongs_to :user, optional: true 
validates :user_id, presence: true 

optional: true aber User_id mit Präsenz: true, es ist nicht in Konflikt geraten? Wie benötigen Sie ein optionales?

Sie haben mehr Bugs zu behandeln, danke, dachte.

Viel Glück

0

Ich bin kein Experte Schienen, aber ich werde versuchen, mit diesem zu helfen und versuchen, die möglichen Orte von Fehlern zu erarbeiten.

  1. In Ihrem Schema sicherstellen, dass Sie in Ihrer Permissions-Tabelle eine user_id-Spalte haben.

  2. Testen Sie, dass die Assoziation in Rails-Konsole funktioniert. user = User.first user.permits Wenn es funktioniert, großartig, bedeutet es, dass Ihre Assoziation funktioniert.

  3. Testen Sie Ihre Erlaubnisse erstellen Funktion selbstständig ohne "Benutzer" darin enthalten. Fügen Sie den Benutzeraspekt nur hinzu, nachdem Ihre Genehmigungen vollständig funktionieren!

Hoffe es hilft!Prost

Verwandte Themen