显示字段的简单帮助(如果存在)

时间:2015-08-23 13:21:51

标签: ruby-on-rails

所以我想解决一个简单的问题,我想,具体来说: 我有一个简单的视图,检查用户是否有电子邮件,如果是 - 它显示它。我想让它更温和,所以想创建一个方法来检查字段是否存在,这里是视图:

{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

2 个答案:

答案 0 :(得分:0)

当前方法存在问题:

index

如果在类中定义一个 def self.display(info) self.user.info if self.user.info end 的方法,那么它将是该类的类方法,然后你必须调用这样的方法:self.。但是,在这种情况下,你不希望这样。您只需要一个简单的辅助方法ClassName.method_name,它将获取一个对象并返回display(如果存在)。您还需要确保object.user.emailobject.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

希望这有帮助