2015-06-15 41 views
0

我正在使用has_many:通过应用程序中的关联。我实现诸如模型之间的关联: -通过rails中的关联实现has_many 4

employee.rb

class Employee < ActiveRecord::Base 
has_many :inventories, through: :employee_inventories 
end 

inventory.rb

class Inventory < ActiveRecord::Base 
    has_many :employees, through: :employee_inventories 
end 

employee_inventories.rb

class EmployeeInventory < ActiveRecord::Base 
    belongs_to :employee 
    belongs_to :inventory 
end 

我InventoryController.rb创建一个方法,如:

def inventory_status 
     p 'paramsssssssssssssssssssssssssssss' 
     p params 
     p employee_inventories_params 
     @employee_inventories = @inventory.employee_inventories.build(employee_inventories_params) 
     if @employee_inventories.save 
     p 'sssssssssssssssssssssssssss' 
     redirect_to inventories_path 
     else 
     p 'aaaaaaaaaaaaaaaaa' 
     render :action => :show 
    end 

    def employee_inventories_params 
     params.require(:employee_inventory).permit(:employee_id, :status) 
     end 

,并鉴于我的应用程序,当我跑这这给了我的错误,我使这个

<%= link_to 'Request for inventory', inventory_status_inventory_path(@inventory), 
:class => 'btn btn-success' %> 

这种方法

的ActionController :: ParameterMissing(参数是丢失或价值是 空:employee_inventory)

我想存储empl oyee_id和employee_inventory表中的状态。请指导我。如何实施? Thankz提前。

+0

你记录'params'和'employee_inventories_params'的输出是什么? – RichardAE

+0

from params我得到 {“controller”=>“inventory”,“action”=>“inventory_status”,“id”=>“1”} and employee_inventory_params我得到了'params is missing' – Aniee

+1

这是因为你的link_to是一个'get'请求,你实际上并没有发布任何数据,所以params中不存在'employee_inventory'键。 – RichardAE

回答

0

请试试这个代码

def inventory_status 
     @employee_inventories = EmployeeInventory.new(employee_inventories_params) 
     if @employee_inventories.save 
     redirect_to inventories_path 
     else 
     render :action => :show 
     end 
    end 

,并在您的视图

<%= link_to 'Request for inventory', inventory_status_inventory_path(@inventory, employee_inventory => {:employee_id => 1, :status => 'test'}), 
:class => 'btn btn-success' %> 

希望这会帮助你。

+0

这是正确的答案,但这种方法(从原始问题,而不是答案本身)不是RESTful。你应该在相关控制器的“创建”动作中通过发布创建。 – RichardAE

0

可能没有与employee_inventory中的键def employee_inventories_params匹配的数据,因此您收到此错误。

你可以inspectparams追踪它发送给你的控制器。在你形成PARAMS你应该得到类似以下

:employee_inventory => {:employee_id => 1, :status => true}