我正在创建员工工资单应用程序。因为我有两个模型,一个是员工,另一个是薪水。我添加了外键以获取薪水表中的employee_id,并使用gem rails3-jquery-autocomplete'在_form.html.erb(工资)中获取员工姓名。我已经遵循了宝石中的所有步骤。但外键关系不起作用。我在薪水表的字段employee_id中获得空值。 “
这里我附上了我的模型,视图,控制器,路线和一切。请检查一下。
我的模特
** Salary.rb **
class Salary < ActiveRecord::Base
belongs_to :employee, :foreign_key => "employee_id"
attr_accessible :basic, :da, :effective_from, :effective_to, :employeesalary, :hra, :ca, :sa, :employee_id
end
Employee.rb
class Employee < ActiveRecord::Base
has_many :salaries, :foreign_key => "employee_id"
attr_accessible :address, :age, :branch, :city, :date_of_birth, :designation, :employee_end_date, :employee_start_date, :gender, :name
end
我的控制器
salaries_controller.rb
class SalariesController < ApplicationController
autocomplete :employee, :name, :display_value => :name, :full => true
def new
@salary = Salary.new
end
def create
@salary = Salary.new(params[:salary])
if @salary.save
flash[:success] = "Created a new month salary!"
redirect_to salaries_path
else
flash[:error] = "Couldn't Create salary"
render 'new'
end
end
def index
@salary = Salary.order('created_at DESC').paginate(:page => params[:page], :per_page => 10)
end
def show
@salary = Salary.find(params[:id])
@employee =Employee.all
end
end
employees_controller.rb
class EmployeesController < ApplicationController
def new
@employee = Employee.new
@salary = @employee.salaries.build
end
def create
@employee = Employee.new(params[:employee])
if @employee.save
flash[:success] = "Created Employee Successfully!"
redirect_to employee_path(@employee)
else
flash[:error] = "Couldn't Create a Employee"
render 'new'
end
end
def index
@employee = Employee.order('created_at DESC').paginate(:page => params[:page], :per_page => 10)
end
def show
@employee = Employee.find(params[:id])
end
end
的routes.rb
resources :salaries do
get :autocomplete_employee_name, :on => :collection
end
resources :employees
_form.html.erb(工资)
<%= form_for @salary do |f| %>
<%= f.hidden_field :employee_id, :id => "real_employee_id" %>
<span class="help-block">Enter the Employee name</span>
<%= autocomplete_field_tag 'throwaway_employee', '',
autocomplete_employee_name_salaries_path,
:size => 75, :id_element => '#real_employee_id' %>
的application.js
//= require jquery
//= require jquery_ujs
//= require autocomplete-rails
//= require_tree .
我已经检查过,但找不到错误。请帮助我摆脱这个问题。
提前致谢...
答案 0 :(得分:0)
我今晚玩了这个代码,我想我知道可能会发生什么。
当您开始输入员工姓名时,会弹出绿色名称列表。如果您只是直接点击输入,表单将获取您到目前为止输入的所有内容并使用它来查找名称。这失败是因为名称不完整。由于您没有对员工ID进行验证,因此表单可以正常工作并保存空员工ID。
您需要做的是使用向下箭头键或鼠标选择其中一个名称。执行此操作时,名称将更改为浅绿色,文本框中的文本将替换为全名。 然后当你提交表格时,找到匹配并且一切正常!
所以你的代码工作正常,你只是错误地使用了GUI。
您还应该将此行添加到salary.rb文件中:
validates :employee_id, presence: true
这就是我的理论。请试一试,告诉我们你的工作方式。