2016-09-21 67 views
0

我工作的兩個簡單的模型Rails的協會,未定義的方法

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

class User < ApplicationRecord 
    has_many :permits 
    has_secure_password 
end 

在軌控制檯,我做了以下

user = User.find(10) 

哪一個用戶對象分配給用戶。 但是,當我想創建一個允許用戶它給這個錯誤

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

如何解決這個問題呢?謝謝!

這是我permit_controller我認爲這個問題是在創建操作

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 

許可證/新/ 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: 「車牌」 %> <% = 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 %> 

+0

您可以發佈您用來嘗試創建許可證的代碼嗎?這將是非常相關的信息 – Ren

+0

我已經更新了我的問題:) –

回答

0

你必須創建許可證如下:

user.permits.create(..) 
+0

仍然是一樣的錯誤:( –

+0

你可以發佈你的'許可證'創建代碼? –

+0

我已更新我的問題:) –

0

您可以設置before_action :set_permit, only: [:show, :destroy],這意味着你只能在那些2種方法使用@permits(應爲單數),我看到你在使用@permits更新。沒有看到您允許user_id for permit_params。

在創建@permits = user.permits.create(permit_params)您沒有聲明用戶。 您可以設置before_action :set_permit, only: [:show, :destroy],所以爲什麼不@permits.destroy

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

可選:真正的但存在USER_ID:真的,是不是有衝突?你如何需要一個可選的?

你有更多的錯誤來處理謝謝你的想法。

好運

0

我不是一個軌道專家,但我會盡力幫忙的這一點,並試圖找出錯誤的可能的位置。

  1. 在您的模式中,確保您的許可證表中有一個user_id列。

  2. 測試該關聯在rails控制檯中工作。 user = User.first user.permits 如果有效,它意味着您的關聯正在工作。

  3. 測試您的許可證創建自己的第一個功能,而不包括「用戶」。僅在您的許可證完全正常運行後添加用戶方面!

希望它有幫助!歡呼聲

相關問題