干我的意见,帮手/方法/其他什么?

时间:2009-11-17 13:20:01

标签: ruby-on-rails views dry

过去曾写过一些RoR网站,但从来没有过多地干扰我的观点,因为它只是在看我的代码。

刚开始一个新网站,可能是一个合作,需要帮​​助

我在观看次数和多个地方多次调用此行。

<%= Person.find_by_id(rider.person_id).name %>

我希望能够做到

<%= get_name(rider.person_id) %>

所以我假设我把这段代码放在某处

def get_name=(id)
    Person.find_by_id(id).name
end

但是在哪里?我已经在模型中尝试并作为帮助者,但总是得到nomethoderror。

4 个答案:

答案 0 :(得分:0)

尝试application_controller.rb

答案 1 :(得分:0)

Rider类上只返回名称的方法怎么样?

def name
   person = Person.find_by_id( @person_id )
   if !person.nil?
      return person.name
   end
   return nil
end

用作

<%= rider.name %>

或者,您可以在Person类上使用static / class方法。

 def Person.get_name( rider )
     if !rider.nil?
       person = find_by_id( rider.person_id )
       if !person.nil?
          return person.name
       end
     end
     return nil
 end

称为

 <%= Person.get_name( rider ) %>

请注意,我在视图代码中删除了对id的引用。

答案 2 :(得分:0)

命名此方法时出错了。 为什么在方法名称中加上“=”符号?

您应该仅在控制器中调用此代码,并且在视图中仅调用结果。 这种方法的最佳位置是帮手。

def get_person_name_by_id(id)
  Person.find_by_id(id).name || nil
end

答案 3 :(得分:0)

Rails是关于约定优于配置的。除非被覆盖,否则所有辅助方法都采用最常见的选项。但是,ActiveRecord模型没有有用的默认值。

指定默认操作:

class Person < ActiveRecord::Base
  def to_s
    name
  end
end

现在每次尝试在字符串上下文中评估一个人物实例时,你都会得到一个名字。

所以

<%= Person.find_by_id(rider.person_id).name %>

现在可以替换为

<%= rider.person %>

除此之外,您还可以指定字段和方法。

相关问题