我Sportists
有多个学科,每个学科都有一个record
。我想显示记录,在数据库中,它们保存为m100rec
,m200rec
等等。有没有办法可以像这样显示它们:
@discipline + "rec"
?我已将@discipline
保存在我的Controller
中,作为包含session
值的实例变量,并且该会话中保存了规则名称。
修改
视图:
<% @sportists.each do |s| %>
<%= s.m100rec %>
<% end %>
并且因为有很多学科都是按照'学科'+'rec'的相同惯例命名的,所以我想让代码更具可读性和干燥性,并且只是以某种方式使用<%= s.discipline+'rec' %>
。
答案 0 :(得分:1)
您可以使用:
<% @sportists.each do |s| %>
<%= s.send("#{@discipline}rec") %>
<% end %>
或者
<% @sportists.each do |s| %>
<%= s.attributes["#{@discipline}rec"] %>
<% end %>
m100rec
是字段,方法或关联,则第一个将起作用。m100rec
是一个字段才有效,但我认为它更清楚代码的作用。构建Sportists
和纪律记录之间关系的更好方法可能是使用连接表吗?
class Sportist < ActiveRecord::Base
has_many :sportist_disciplines
has_many :disciplines, :through => :sportist_disciplines
...
end
class SportistDiscipline < ActiveRecord::Base
belongs_to :sportist
belongs_to :discipline
...
end
class Discipline < ActiveRecord::Base
has_many :sportist_disciplines
has_many :sportists, :through => :sportist_disciplines
...
end
然后,您可以在record
表中找到sportist_disciplines
的字段,然后使用 -
在控制器中:
@sportists = Sportist.includes(:sportist_disciplines).where( ... )
@discipline = Discipline.where( ... ).first
在视图中:
<% @sportists.each do |s| %>
<%= s.sportist_disciplines.where(:discipline => @discipline).record %>
<% end %>
N.B:这只是对'rail-y&#39;的建议。这样做的方法 - 根据应用程序的其余部分和/或数据来源,它可能不合适。
答案 1 :(得分:0)
@discipline.map{|e| e + "rec"}
我认为你正在寻找类似的东西。