在我的表中获取空值?

时间:2014-06-19 04:28:05

标签: ruby-on-rails ruby-on-rails-3 autocomplete foreign-keys jquery-autocomplete

我正在创建员工工资单应用程序。因为我有两个模型,一个是员工,另一个是薪水。我添加了外键以获取薪水表中的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 .

我已经检查过,但找不到错误。请帮助我摆脱这个问题。

提前致谢...

1 个答案:

答案 0 :(得分:0)

我今晚玩了这个代码,我想我知道可能会发生什么。

当您开始输入员工姓名时,会弹出绿色名称列表。如果您只是直接点击输入,表单将获取您到目前为止输入的所有内容并使用它来查找名称。这失败是因为名称不完整。由于您没有对员工ID进行验证,因此表单可以正常工作并保存空员工ID。

您需要做的是使用向下箭头键或鼠标选择其中一个名称。执行此操作时,名称将更改为浅绿色,文本框中的文本将替换为全名。 然后当你提交表格时,找到匹配并且一切正常!

所以你的代码工作正常,你只是错误地使用了GUI。

您还应该将此行添加到salary.rb文件中:

validates :employee_id, presence: true

这就是我的理论。请试一试,告诉我们你的工作方式。