所以我想解决一个简单的问题,我想,具体来说: 我有一个简单的视图,检查用户是否有电子邮件,如果是 - 它显示它。我想让它更温和,所以想创建一个方法来检查字段是否存在,这里是视图:
{1:999999999999}
我尝试在application_helper中编写一个方法:
<ul class="list-unstyled">
<li>Contact email: <%= @lumber.user.email if @lumber.user.email %></li>
<li>Contact phone:<%= @lumber.user.phone if @lumber.user.phone %></li>
<li>Website: <%= link_to "#{@lumber.user.website}", "http://#{@lumber.user.website}" if @lumber.user.website%></li>
<li>where to find: <%= @lumber.location %></li>
</ul>
并称之为: def self.display(info)
self.user.info if self.user.info
end
,但收到错误:
@lumber.display(email)
任何提示?有点新的RoR
答案 0 :(得分:0)
index
如果在类中定义一个 def self.display(info)
self.user.info if self.user.info
end
的方法,那么它将是该类的类方法,然后你必须调用这样的方法:self.
。但是,在这种情况下,你不希望这样。您只需要一个简单的辅助方法ClassName.method_name
,它将获取一个对象并返回display
(如果存在)。您还需要确保object.user.email
和object.user
都存在。
object.user.email
然后,从视图中调用它: def display(lumber)
if lumber.user && lumber.user.email
lumber.user.email
else
'Email Not Present!'
end
end
。
答案 1 :(得分:0)
您要做的是元编程。在helper
中,info
是变量名称,与self.user.info
无关。
@lumber.display(email)
正在尝试查找名为email的变量,这是错误。
所以,让我们这样做:
@lumber.display("email")
并在助手
中def self.display(var_name)
self.user.instance_variable_get(var_name) if self.user.instance_variable_defined?(var_name)
end
希望这有帮助