过去曾写过一些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。
答案 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 %>
除此之外,您还可以指定字段和方法。