在方法名称在另一个变量中的变量上调用方法

时间:2011-01-26 02:08:57

标签: ruby-on-rails ruby ruby-on-rails-3

<% @labels.each do |label| %>
    <input type="text" name="<%=label.name%>" value="<%=@car.(label.related_to) %>" class="big-font" style="width: <%=label.width%>px; top: <%=label.y_coor%>px; left: <%=label.x_coor%>px;" /> 
<% end %>

大家好,我是rails的新手,所以这应该是一个相当容易回答的问题。

问题在于:<%=@car.(label.related_to) %>

label.related_to包含字符串“make”。我试图让它做到这一点:@car.make

任何想法的人?

谢谢, 阿兰

2 个答案:

答案 0 :(得分:4)

使用send向对象发送消息:

@car.send(label.related_to)

如果label.related_to有可能不是该对象的有效方法,您可能希望准备好抓住NoMethodError

答案 1 :(得分:1)

您可以使用try方法。

<%= car.try(label.related_to) %>

try会尝试在car上调用该方法。但是,如果方法(即make)不存在,则会抛出错误。

您可以使用respond_to?来确保该方法存在:

<%= car.try(label.related_to) if car.respond_to?(label.related_to) %>