Ruby on rails RubyonRails:将数组值存储在变量中并用作字符串
我正在重构一些代码。我试图在视图中使用数组作为for循环的一部分,该循环在表中生成列 我已在控制器中定义了阵列: 受试者控制器.rbRuby on rails RubyonRails:将数组值存储在变量中并用作字符串,ruby-on-rails,arrays,hash,Ruby On Rails,Arrays,Hash,我正在重构一些代码。我试图在视图中使用数组作为for循环的一部分,该循环在表中生成列 我已在控制器中定义了阵列: 受试者控制器.rb def index ... @CRFS_TO_VIEW = [Baseline, TreatmentCompletion] @CRF_PATH = {Baseline => 'baseline_path', TreatmentCompletion => tc_path} end 所以我的目标;当函数在@CRFS_TO_视图上迭
def index
...
@CRFS_TO_VIEW = [Baseline, TreatmentCompletion]
@CRF_PATH = {Baseline => 'baseline_path', TreatmentCompletion => tc_path}
end
所以我的目标;当函数在@CRFS_TO_视图上迭代时,将从@CRF_path中选择正确的路径并将其附加到链接_TO函数
index.html.erb
<% @CRFS_TO_VIEW.each do |crf| %>
<% path = @CRF_PATH[crf] %>
<%= link_to "edit", path(crf.where(subject_id: sub.subject_id).first %>
<% end %>
我还尝试:
<%= link_to "edit", @CRF_PATH[crf](crf.where(subject_id: sub.subject_id).first %>
这没用。我觉得我必须接近,任何帮助或见解都将不胜感激
谢谢。有几件事:
a。您应该节省一些时间,通过字典而不是数组进行循环:
<% @CRF_PATH.each do |crf, path| %>
...
<% end %>
c。您可以使用以下方法简化对对象的检索:
crf.find_by(subject_id: sub.subject_id)
也就是说,这似乎是一种非常糟糕的做事方式。我建议改为添加视图帮助器:
def crf_path(crf)
case crf
when Baseline then baseline_path(crf)
...
end
有了这样的功能,您可以使用(注意为了安全起见,将find_by
更改为find_by!
):
最后,实例变量不应命名为大写。如果要使用常量,请将其定义为常量(否则请使用小写名称)。以下几点:
a。您应该节省一些时间,通过字典而不是数组进行循环:
<% @CRF_PATH.each do |crf, path| %>
...
<% end %>
c。您可以使用以下方法简化对对象的检索:
crf.find_by(subject_id: sub.subject_id)
也就是说,这似乎是一种非常糟糕的做事方式。我建议改为添加视图帮助器:
def crf_path(crf)
case crf
when Baseline then baseline_path(crf)
...
end
有了这样的功能,您可以使用(注意为了安全起见,将find_by
更改为find_by!
):
最后,实例变量不应命名为大写。如果要使用常量,请将其定义为常量(否则请使用小写名称)。在
@CRFS\u to\u视图
数组中,元素不应该是字符串吗?比如@CRFS\u TO\u VIEW=['Baseline','treatmentcompletion']
。与@CRF_PATH
相同。可能是这样,我一定会尝试一下。但在此之前,将@CRF_PATH[CRF]保存到PATH不起作用。路径未标识。也许我不能在视图中声明变量?所以@CRFS\u TO\u视图不起作用,因为这些项不是字符串。它们是对控制器的引用。在@CRFS\u TO\u视图
数组中,元素不应该是字符串吗?比如@CRFS\u TO\u VIEW=['Baseline','treatmentcompletion']
。与@CRF_PATH
相同。可能是这样,我一定会尝试一下。但在此之前,将@CRF_PATH[CRF]保存到PATH不起作用。路径未标识。也许我不能在视图中声明变量?所以@CRFS\u TO\u视图不起作用,因为这些项不是字符串。它们是对控制器的引用。这样,Baseline.create(id)就可以工作了。这非常有用。我甚至认为我不能用这种方式使用视图助手。我想这就是我一直在寻找的答案,我花了一些时间在这上面,也许会问你一两个问题。非常感谢。这些视图帮助程序是否仅适用于rails 4.0及更高版本?或者更好的问题是,我把助手放在哪里?@IanEllis你可以把它们放在app/helpers/application\u helper.rb
下。这非常有用。我甚至认为我不能用这种方式使用视图助手。我想这就是我一直在寻找的答案,我花了一些时间在这上面,也许会问你一两个问题。非常感谢。这些视图帮助程序是否仅适用于rails 4.0及更高版本?或者更好的问题是,我把助手放在哪里?@IanEllis你可以把它们放在app/helpers/application\u helper.rb
下。