我正在研究两个简单的模型
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)
将User对象分配给用户。 但是,当我想为用户创建许可时,它会出现此错误
NoMethodError in PermitsController#create
undefined method `Permit' for #<User:0xaaa3528>
如何解决这个问题?谢谢!
这是我的permit_controller,我认为问题出在CREATE操作
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:&#34;车牌&#34; %GT; &lt;%= f.text_field:carplate,class:&#39; form-control&#39; %GT;
<%= 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 :(得分:0)
您必须按如下方式创建许可证:
user.permits.create(..)
答案 1 :(得分:0)
你设置before_action :set_permit, only: [:show, :destroy]
,这意味着你只能在这两种方法中使用@permits(应该是单数),我看到你在更新中使用@permits。没看到你允许user_id为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
optional:true但user_id with presence:true,是不是冲突?你怎么需要一个可选的?
你有更多的错误要处理谢谢你。
祝你好运答案 2 :(得分:0)
我不是铁路专家,但我会尝试帮助解决这个问题并尝试解决可能存在的错误。
在您的架构中,请确保在Permits表中有一个user_id列。
测试该关联在rails控制台中是否有效。 user = User.first user.permits 如果它有效,那就意味着你的协会正在发挥作用。
首先测试你的许可证创建功能,而不包括&#34;用户&#34;在里面。只有在您的许可证完全正常运行后才能添加用户方面!
希望它有所帮助!干杯