2016-09-21 3 views
0

Я пытаюсь реализовать страницу приложения Разрешения на парковку с использованием ROR. Я не смог получить данные в базе данных. База данных разрешений также связана с пользователем. Программа не сохранит данные и не выполнит оператор else. Сгенерирована ошибка, я думаю, что что-то пропустил, но я не знаю точной проблемы. Любая помощь приветствуется!Не удается сохранить мои данные в базе данных sqlite

Permit_controller.rb

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 = Permit.new(permit_params) 
    if @permits.save 
     redirect_to root_path 
    else 
     redirect_to contact_path 
    end 
    end 

    def destroy 
    end 

    def show 
    @permits = Permit.find(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,:permitstart, :permitend) 
    end 
end 

Permit.rb

class Permit < ApplicationRecord 
    belongs_to :user 
end 

Create_permit.rb

class CreatePermits < ActiveRecord::Migration[5.0] 
    def change 
    create_table :permits do |t| 
     t.string :vehicle_type 
     t.string :name 
     t.string :studentid 
     t.string :department 
     t.string :carplate 
     t.date :permitstart 
     t.date :permitend 
     t.references :user, foreign_key: true 

     t.timestamps 
    end 
    add_foreign_key :permits, :user 
    add_index :permits, [:user_id, :created_at] 
    end 
end 

User.rb

class User < ApplicationRecord 
     has_secure_password 
     has_many :permits 
    end 

    #book pg 264 Validation 

permit/new.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 :"License Plate" %> 
     <%= f.text_field :carplate, class: '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 %> 
    </div> 
</div> 

schema.rb

ActiveRecord::Schema.define(version: 20160921071908) do 


    create_table "permits", force: :cascade do |t| 
    t.string "vehicle_type" 
    t.string "name" 
    t.string "studentid" 
    t.string "department" 
    t.string "carplate" 
    t.date  "permitstart" 
    t.date  "permitend" 
    t.integer "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["user_id"], name: "index_permits_on_user_id" 
    end 

    create_table "users", force: :cascade do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "password_digest" 
    t.integer "user_type" 
    end 

конец

+0

Есть ли какие-либо записи в журнале 'log/development.log', когда вы пытаетесь создать разрешение? – spickermann

+1

В соответствии с кодом форма разрешения должна быть сохранена без пользователя, так как вы не связываете пользователя где-то в форме, вставьте журналы, когда вы нажимаете кнопку отправки –

+0

Да, есть, главное, из журнала прямо мне to contact.html, который является заявлением ELSE –

ответ

3

чек с этим @permits.save!. показывает точную ошибку.

+0

Когда я изменил его на @ permit.save !, он показывает ActiveRecord :: RecordInvalid в PermitsController # create Не удалось выполнить проверку: пользователь должен существовать –

+0

У вас есть валидация для 'user_id'? Вы делаете это со страницы с зарегистрированным пользователем? – tworitdash

+0

У меня нет никаких валидаций, да, я установил условие, которое пользователь должен войти в систему первым –

0
module ApplicationHelper 
    #for current user to use through out the app 
     def current_user 
       @current_user ||= session[:current_user_id] && User.find_by_id(session[:current_user_id]) # Use find_by_id to get nil instead of an error if user doesn't exist 
       end 
end 

и

def create 
     @permits = Permit.new(permit_params) 
     @permits.user = current_user 
     if @permits.save 
      redirect_to root_path 
     else 
      redirect_to contact_path 
     end 
     end 

тест он

0

Или вы можете просто сказать, что разрешение имеет одного пользователя и избежать путаницы.

#models/permit.rb 
class Permit < ApplicationRecord 
    has_one :user 
end 

#controllers/permit_controller.rb 
def create 
    @user = User.find(session[:user_id]) #use your session variable 
    @permits = Permit.new(permit_params) 

    if @permits.save 
     @user.permits << @permits 
     redirect_to root_path 
    else 
     redirect_to contact_path 
    end 
end 

Он будет сохранять разрешения для зарегистрированного пользователя.

Смежные вопросы