我有一个字符串,它有多个值,person_ids
以及他们有多少个休假日。我想在我看来使用这些数据。
这是我的MyGroupAcc模型:
class MyGroupAcc < ActiveRecord::Base
belongs_to :entry
def self.all_people
where(person_id: User.all.pluck(:person_id))
end
def self.active_people
all_people.where(is_active: 'Y')
end
def self.active_vacation_data
active_people.select(:person_id, :accum_accrued, :taken)
end
def total_v_hours
accum_accrued.to_d - taken.to_d
end
def total_v_days
total_v_hours / 8
end
这是我的输入控制器,我的视图操作将是:
def my_group
peoples_vacation_information = MyGroupAcc.active_vacation_data.all
peoples_vacation_information.map do |person|
@p = "person #{person.person_id} has #{person.total_v_days} vacation days"
end
render :my_group
end
这是Haml的my_group
视图:
%table.table.table-bordered.trace-table
%thead
%tr.trace-table
%th.ts.jp{:style => 'border: solid black;'} Person ID
%th.ts.jp{:style => 'border: solid black;'} Total Vacation Days
%tr.trace-table
-@p.each do |r|
%tr.trace-table
%td.trace-table{:style => 'border: solid black;'}= r
在我看来,我收到了这个错误:
udefined method `each' for "person 22076 has 3.0 vacation days":String
但是在我的控制台中,运行此代码时会得到这个
peoples_vacation_information = MyGroupAcc.active_vacation_data.all
peoples_vacation_information.map do |person|
@p = "person #{person.person_id} has #{person.total_v_days} vacation days"
end
这就是吐出来的,这是我希望在我的观点中看到的:
["person 16016 has 7.0 vacation days", "person 16256 has 0.0 vacation days", "person 16256 has 18.5 vacation days", "person 17258 has 0.0 vacation days", "person 17258 has 5.0 vacation days", "person 17371 has 0.0 vacation days", "person 17371 has 20.0 vacation days", "person 19551 has 0.0 vacation days", "person 19551 has 26.5 vacation days", "person 20850 has 0.5 vacation days", "person 20850 has 14.0 vacation days", "person 21714 has 0.5 vacation days", "person 21714 has 1.0 vacation days", "person 22076 has 0.0 vacation days", "person 22076 has 3.0 vacation days"]
答案 0 :(得分:1)
这样做:
def my_group
@peoples_vacation_information = MyGroupAcc.active_vacation_data.all
end
#app/views/my_group_acc/my_group.html.erb
%table.table.table-bordered.trace-table
%thead
%tr.trace-table
%th.ts.jp{:style => 'border: solid black;'} Person ID
%th.ts.jp{:style => 'border: solid black;'} Total Vacation Days
%tr.trace-table
- @peoples_vacation_information.each do |person|
%tr.trace-table
%td.trace-table{:style => 'border: solid black;'}= "person #{person.person_id} has #{person.total_v_days} vacation days"
<% end %>
问题是您将@p
变量作为字符串(rob
已修复)。
除了语法问题之外,它的构造很糟糕有两个原因 - 首先,你要拆分一个非常好的集合(你可以将它传递给你的视图)其次,你试图构建另一条数据只是为了拆分它。
您最好在控制器中设置@instance_variable
,然后您可以在视图中循环播放。
您最好在MyGroupAcc
模型中使用scopes
(可以链接,不用担心):
#app/models/my_group_acc.rb
class MyGroupAcc < ActiveRecord::Base
belongs_to :entry
scope :all_people, -> { where(person_id: User.pluck(:person_id)) }
scope :active_people, -> { where is_active: "Y" }
scope :active_vacation_data, -> { active_people.select(:person_id, :accum_accrued, :taken) }
def total_v_hours
accum_accrued.to_d - taken.to_d
end
def total_v_days
total_v_hours / 8
end
end
答案 1 :(得分:0)
@p
这里只是一个简单的字符串,而不是数组或集合。
你可以用这个解决这个问题
@p=peoples_vacation_information.map do |person|
"person #{person.person_id} has #{person.total_v_days} vacation days"
end