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'})%>
{:状态=>'已取消'})%>
条件无法执行是什么意思?会发生什么?