2016-10-08 1 views
0

Ich erstelle eine Website mit Ruby on Rails. Ich traf ein Problem, das ich brauche, um meine Daten als Text auf meiner Web-Seite zum Beispiel anzeigen <h2><%[email protected]%></h2> aber ich erhalte diesen FehlerRendern von Daten aus meinem Modell RAILS

NoMethodError in Permits#show 
Showing C:/Users/GaryVLC/RubymineProjects/Parking_and_Safety_3/app/views/permits/show.html.erb where line #7 raised: 

undefined method `permitstart' for #<Permit::ActiveRecord_Relation:0xb69e290> 

Ich bin nicht sicher, ob ich die richtigen Sachen in meinem Controller bin inputing. Kannst du bitte einen Blick darauf werfen? Jede Hilfe wird geschätzt!

Dies ist die Web-Seite, die ich meine Daten übertragen wollen (show.html.erb)

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

<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 

    <h2><%[email protected]%></h2></br> 

    </div> 
</div> 

Dies ist die Web-Seite, dass die Schaltfläche Klirren in die (show.html.erb)

<h2>My Permits</h2> 
<table> 
    <tr> 
    <th>Permit Start Date</th> 
    <th>Permit End Data</th> 
    <th>Action</th> 
    <th> </th> 
    </tr> 
    <% @permits.each do |permit| %> 

     <tr> 
     <td><%= permit.permitstart %></td> 
     <td><%= permit.permitend %></td> 
     <td><%= link_to 'Detail', viewpermit_path(permit) %></td> 
     <td><%= link_to 'Edit', edit_permit_path(permit) %></td> 
     </tr> 

    <% end %> 

</table> 

Das ist mein erlaubt Controller

class PermitsController < ApplicationController 
    before_action :set_permit, only: [:destroy] 
    def index 
    @permits = Permit.where(:user_id => current_user.id) 
    end 

    def new 
    @permits = Permit.new 
    end 

    def create 
    @permits = current_user.permits.build(permit_params) 
    if @permits.save 
     redirect_to invoice_path 
    else 
     render 'new' 
    end 
    end 


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

    def confirm 
    @fields = %i[vehicle_type, carplate, studentid, name, department, permitstart, permitend] 
    @permit = current_user.permits.build(permit_params) 
    render :new and return unless @permit.valid? 
    end 

    def show 
    @permits = Permit.where(:user_id => current_user.id) 
    end 

    def update 
    @permits = Permit.where(user_id: current_user).take 
    respond_to do |format| 
     if @permits.update(permit_params) 
     format.html { redirect_to root_path} 
     flash[:success] = "Permit 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 

    def edit 
    @permits = Permit.find(params[:id]) 
    #@permits = Permit.find_or_initialize_by(user_id: params[:id]) 
    end 
    def detail 

    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 

Das ist mein route.db

Rails.application.routes.draw do 
    resources :users 
    resources :permits do 
    collection do 
     post :confirm 
    end 
    end 
    resources :visitor_permits 
    root 'static_pages#home' 

    get 'viewpermit' =>'permits#show' 

    get 'invoice' => 'permits#invoice' 
    get 'payment' =>'transaction#new' 
    get 'show_visitor_permit' =>'visitor_permits#show' 
    get 'show_permit' =>'permits#index' 
    get 'visitorpermit' => 'visitor_permits#new' 
    post 'createpermit' => 'permits#create' 
    get 'homepage/index' 
    post 'permits' => 'permits#create' 
    get 'permitapplication' => 'permits#new' 
    get 'adminlogin' => 'admin_controller#index' 
    get 'patrollogin' => 'patrol_officer_controller#index' 
    get 'createcitation' => 'citations#new' 
    get 'contact'=> 'static_pages#contact' 
    get 'about' => 'static_pages#about' 
    get 'signup' => 'users#new' 
    get 'help' => 'static_pages#help' 
    post 'users' => 

'users#create' 
    get 'login' => 'sessions#new' #Page for a new session 
    post 'login' => 'sessions#create' #Create a new session 
    delete 'logout'=>'sessions#destroy' #Delete a session 


    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
end 
+0

Sieht aus wie Ihre Show-Aktion ist setu p falsch (es sollte normalerweise einen einzelnen Datensatz/ein einzelnes Objekt finden, aber eine Sammlung zurückgeben). Sehen Sie sich die unten stehende Dokumentation und die @richardpeck-Antwort an. http://guides.rubyonrails.org/getting_started.html#showing-articles – user3366016

+0

können Sie die Params posten, wenn Sie auf "Detail" in der Konsole klicken, bitte? –

+0

Entschuldigung, was meintest du die Params bestanden? –

Antwort

0

Da diese Methode

def show 
    @permits = Permit.where(:user_id => current_user.id) 
end 

Gibt Ihnen eine Beziehung (ein ActiveRecord_Relation), kein einziges Permit Objekt. Du könntest den ersten nehmen, aber ich weiß nicht, ob es das ist, was du willst. Wie auch immer, das ist das Problem.

@permits = Permit.where(:user_id => current_user.id).first 
+0

Was meinen Sie mit einer ActiveRecord_Relation, das heißt, ich kann den Attributwert nicht vom Modell übernehmen? –

+0

Es bedeutet, es ist keine Genehmigung, aber sie sind N Genehmigungen. Sie benötigen EINE Genehmigung, um eine Methode des Permit-Objekts aufzurufen. – Ursus

+0

Oh ich sehe, also sollte ich es mit diesem @permits = Permit.find (params [: id]) ersetzen? Was ich will, ist nur eine Erlaubnis –

1

Sie fordern eine Instanz-Methode auf einem Sammlung Objekt (die Methode nicht existiert).

Sie werden durch die @permits Objekt Schleife müssen und permitstart auf jedem Modell nennen es Objekt enthält:

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

<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 

    <% @permits.each do |p| %> 
     <h2><%= p.permitstart %></h2></br> 
    <% end %> 

    </div> 
</div> 

-

Alternativ, wenn Sie diesen Fehler sind zu sehen, in der show Aktion, müssen Sie Folgendes verwenden:

def show 
    @permits = current_user.permits.find(params[:id]) 
end 
+0

Ich habe diese Lösung zuvor versucht, aber ich habe diesen Fehler ActiveRecord :: RecordNotFound in PermitsController # show Konnte keine ID finden, die auf meine SHOW Aktion zeigt –

+0

Das bedeutet, dass Ihre Routen falsch eingerichtet sind - können Sie Ihre Routen einfügen und wie du auf deine 'show'-Aktion zugreifst? –

+1

Ja schon mit meiner Frage –

Verwandte Themen