Rails:为控制器中的对象创建方法

时间:2013-11-09 10:32:53

标签: ruby-on-rails methods

我有一个名为用户的表,该表与表部门具有关联has_and_belongs_to_many。 在views / users / index.html.erb中,我想显示属于具有字符串的用户的部门示例:“Image,Direction”。我已经通过我的控制台中的下一个代码获得了这个字符串形式的用户:

> p1 = users.find(1)
> pd1 = p1.departments
> for dep in pd1 do
  * t=t + dep.name+", "
>end
>t=t[0..-3]

我的观点/ users / index.html.erb就像:

<% @users.each do |user| %>
  <tr>
    <td><%= user.name %></td>
    <td><%= user.email %></td>
    <td><%= user.phone %></td>
    <td><%= user.birthday.strftime("%d/%m/%Y") %></td>
    <td><%= user.findDepartments %></td>
    <td><%= link_to 'Show', user %></td>
    <td><%= link_to 'Edit', edit_user_path(user) %></td>
    <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>

所以我正在尝试使用user.findDepartments来显示字符串。我在用户控制器中定义了findDepartments方法:

def self.findDepartments
d=self.departments
for dep in d do
   t=t+dep.name+ ", "
end
t=t[0..-3]
end

我收到的错误是: 对于#

未定义的方法`findDepartments'

编辑:我刚刚意识到该怎么做。只需从控制器中删除findDepartments方法,并将其放入用户模型中并进行以下修改:

def findDepartments
    t=""
    d=self.departments
    puts d
    for dep in d do
       t=t+dep.name+ ", "
    end
    t=t[0..-3]
end

2 个答案:

答案 0 :(得分:1)

您必须将findDepartments定义为instance method

def findDepartments
  d=self.departments
  for dep in d do
    t=t+dep.name+ ", "
  end
  t=t[0..-3]
end

答案 1 :(得分:0)

添加实例方法,但使用下一个代码:

 def deparments_names
   self.departments.limit(3).collect(&:name).join(", ")
 end

我不知道为什么你需要做[0 ..- 3]但你可以在join('')之后添加这段代码。但我想说你还需要检查是否有任何部门。