Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 无法设置if else条件与rails 4视图中的多通关联_Ruby_Ruby On Rails 3_Views - Fatal编程技术网

Ruby 无法设置if else条件与rails 4视图中的多通关联

Ruby 无法设置if else条件与rails 4视图中的多通关联,ruby,ruby-on-rails-3,views,Ruby,Ruby On Rails 3,Views,我正在通过协会与许多人一起申请。 在employee.rb中 class Employee < ActiveRecord::Base has_many :inventories, through: :employee_inventories end class Inventory < ActiveRecord::Base has_many :employees, through: :employee_inventories end class EmployeeInvento

我正在通过协会与许多人一起申请。 在
employee.rb中

class Employee < ActiveRecord::Base
 has_many :inventories, through: :employee_inventories
end
class Inventory < ActiveRecord::Base
  has_many :employees, through: :employee_inventories
end
class EmployeeInventory < ActiveRecord::Base
  belongs_to :employee
  belongs_to :inventory
end
employee_inventory.rb中

class Employee < ActiveRecord::Base
 has_many :inventories, through: :employee_inventories
end
class Inventory < ActiveRecord::Base
  has_many :employees, through: :employee_inventories
end
class EmployeeInventory < ActiveRecord::Base
  belongs_to :employee
  belongs_to :inventory
end
class EmployeeInventory
这个协会一切都很好。但当我通过访问employee_清单中的status列实现if-elsif条件时。那样

<% if (inventory.is_available == false && current_employee[:role] == 'INVENTORY') %>
     <% if(inventory.employee_inventories.collect{|e| e.status == 'REQUESTED'}) %>
           <%= link_to 'Allot', inventory_available_status_inventory_path(inventory,   :employee_inventory => { :status => 'ALLOTTED' }) %>
            <%= link_to 'Cancel', inventory_available_status_inventory_path(inventory, :employee_inventory => { :status => 'CANCELLED' } ) %>
     <% elsif (inventory.employee_inventories.collect{|e| e.status == 'ALLOTTED'}) %> 
            <%= link_to 'return'%>
      <% end %>
<% elsif inventory.is_available == true %>
     <%= link_to 'Request for inventory',request_inventories_inventory_path(inventory, :employee_inventory => { :employee_id => current_employee, :status => 'REQUESTED', :inventory_id => inventory}) %>
<% end %>

{:状态=>'allocted'})%>
{:状态=>'已取消'})%>
{:employee_id=>current_employee,:status=>REQUESTED',:inventory_id=>inventory})%>
将员工库存状态更新为请求时的代码。一切正常,但当我将状态更新为Allocated后,第二个elsif条件无法执行

inventory.employee|u inventory.collect{e | e.status=='allocted'}
输出:-

[对]

我很困惑为什么它不能在第二次执行。请引导我。提前感谢。

创建一个包含块返回值的新数组。您有一个
employee\u清单
的状态为'allocted',并且由于您正在
collect
块中检查它:
e.status=='allocted'#=>true
,它创建了一个带有布尔值的数组:
true

要解决您的问题,您可以执行以下操作之一:

inventory.employee_inventories.collect{|e| e.status }.include? 'ALLOTTED'
或者检查是否有任何一名员工的库存被设置为“已分配”(如果您正在这里执行此操作),使用或根据您的要求:

inventory.employee_inventories.any?{|e| e.status == 'ALLOTTED' }
# or
inventory.employee_inventories.all?{|e| e.status == 'ALLOTTED' }
现在,我建议你把逻辑整理成这样。您实际上不需要遵循这一点,因为您的问题已经在上面得到了回答:

<% if inventory.is_available? %>
  <%= link_to 'Request for inventory',request_inventories_inventory_path(inventory, :employee_inventory => { :employee_id => current_employee, :status => 'REQUESTED', :inventory_id => inventory}) %>
<% elsif current_employee[:role] == 'INVENTORY' %>
  <% if inventory.employee_inventories.all?{|e| e.status == 'REQUESTED'} %>
    <%= link_to 'Allot', inventory_available_status_inventory_path(inventory,   :employee_inventory => { :status => 'ALLOTTED' }) %>
    <%= link_to 'Cancel', inventory_available_status_inventory_path(inventory, :employee_inventory => { :status => 'CANCELLED' } ) %>
  <% elsif inventory.employee_inventories.all?{|e| e.status == 'ALLOTTED'} %> 
    <%= link_to 'return'%>
  <% end %>
<% end %>

{:employee_id=>current_employee,:status=>REQUESTED',:inventory_id=>inventory})%>
{:状态=>'allocted'})%>
{:状态=>'已取消'})%>
条件无法执行是什么意思?会发生什么?