Ich bin neu in ROR. Ich implementiere eine Website, die eine Genehmigung erstellt und anschließend den Benutzer auf eine Rechnungsseite umleitet. Ich habe ein Benutzermodell, Rechnung Modell und Genehmigung Modell, das sie Verbindung miteinander haben unter:Rendern von Daten von einem Modell zu einem anderen Controller
invoice.rb
class Invoice < ApplicationRecord
belongs_to :user
has_one :receipt
belongs_to :permit
end
user.rb
class User < ApplicationRecord
has_many :permits
has_many :visitor_permits
has_many :healthreports
has_secure_password
end
permit.rb
class Permit < ApplicationRecord
belongs_to :user
has_one :invoice
end
Was ich tun werde, ist der Benutzer füllen Sie alle Details, wenn sie für Genehmigungen und die Informa beantragen wird in das Genehmigungsmodell gespeichert. Danach wird der Benutzer zur Rechnerseite umgeleitet, die alle Daten, die gerade von dem Benutzer auf der Genehmigungsanwendungsseite gefüllt wurden, aus dem Genehmigungsmodell herauszieht und auf der Rechnungsseite anzeigt, die danach wieder auf der Rechnungsseite gespeichert wird. Ich habe keine Ahnung, wie ich es anfangen soll. Irgendeine Idee, wie es geht?
Ich habe Genehmigung und Rechnung Controller. Wenn ihr noch mehr Informationen oder meinen Code braucht, könnt ihr mir das gerne sagen. Vielen Dank!
Was ich versucht habe, ist eine Variable mit dem Genehmigungsmodell in meiner Rechnung Controller NEW Aktion erstellen, damit ich es verwenden kann, um die Daten von Permit-Modell zu rendern und dann in Rechnungsmodell zu speichern.
class InvoiceController < ApplicationController
def new
@permits = Permit.find(params[:id])
@invoice = Invoice.new
end
def create
#@current_user = User.find_by(id: session[:user_id])
@invoice = current_user.visitor_permits.invoices.build(invoice_params)
if @invoice.save
else
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_invoice
@invoice = Invoice.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def invoice_params
params.require(:invoice).permit(:vehicle_type, :name, :department, :carplate, :duration, :permitstart, :permitend, :price, :time)
end
end
Aber ich halte den Fehler immer
ActiveRecord::RecordNotFound in InvoiceController#new
Couldn't find Permit with 'id'=
, die auf die neue Aktion.
@permits = Permit.find(params[:id])
Das ist mein permits_controller.rb, welcher Benutzer in der Aktion erstellen, sobald die Taste gedrückt
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 createinvoice_path(@permits)
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.find(params[: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
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
Route.db
Rails.application.routes.draw do
resources :users
resources :permits do
collection do
post :confirm
end
end
resources :visitor_permits do
collection do
post :confirm
end
end
resources :invoice
resources :receipt
resources :health_report
root 'static_pages#home'
get 'permitapplication' => 'permits#new'
get 'viewpermit' =>'permits#show'
get 'show_permit' =>'permits#index'
get 'invoice' => 'permits#invoice'
post 'createpermit' => 'permits#create'
post 'permits' => 'permits#create'
post 'createvpermit' => 'visitor_permits#create'
post 'vpermits' => 'visitor_permits#create'
get 'show_vpermit' =>'visitor_permits#index'
get 'show_visitor_permit' =>'visitor_permits#show'
get 'visitorpermit' => 'visitor_permits#new'
get 'createinvoice' => 'invoice#new'
post 'invoice' => 'invoice#create'
get 'new_health_report' => 'health_report#new'
get 'payment' =>'transaction#new'
get 'homepage/index'
get 'adminlogin' => 'admin_controller#index'
get 'patrollogin' => 'patrol_officer#index'
post 'citations' => 'citations#create'
get 'new_citation' => 'citations#new'
get 'unpaid_citations' => 'citations#list_all'
get 'edit_Citation' => 'citations#edit'
get 'contact'=> 'static_pages#contact'
get 'about' => 'static_pages#about'
get 'help' => 'static_pages#help'
get 'signup' => 'users#new'
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
Können Sie die "Routen" für die Rechnung buchen? – Sajan
Ich habe meine Frage aktualisiert :) –