如何在Rails中组合多个变量?

时间:2014-05-07 11:04:19

标签: ruby-on-rails ruby session variables instance-variables

Sportists有多个学科,每个学科都有一个record。我想显示记录,在数据库中,它们保存为m100recm200rec等等。有没有办法可以像这样显示它们:

@discipline + "rec"?我已将@discipline保存在我的Controller中,作为包含session值的实例变量,并且该会话中保存了规则名称。

修改

视图:

<% @sportists.each do |s| %>
 <%= s.m100rec %>
<% end %>

并且因为有很多学科都是按照'学科'+'rec'的相同惯例命名的,所以我想让代码更具可读性和干燥性,并且只是以某种方式使用<%= s.discipline+'rec' %>

2 个答案:

答案 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"}

我认为你正在寻找类似的东西。