0

私は、関連 has_and_belongs_to_many とテーブルdepartmentsを持つusersというテーブルを持っています。views/users/index.html.erb で、ユーザーに属する部署を文字列で表示したい 例: "画像、方向"。コンソールで次のコードを使用して、ユーザーからこの文字列を既に取得しています。

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

私のviews/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

そして、私が受け取ったエラーは次のとおりです: undefined method `findDepartments' for #


編集:私はそれを行う方法を理解しました。コントローラーから findDepartments メソッドを消去し、次の変更を加えてユーザー モデルに配置します。

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

2 に答える 2

1

findDepartmentsとして定義する必要がありますinstance method

def findDepartments
  d=self.departments
  for dep in d do
    t=t+dep.name+ ", "
  end
  t=t[0..-3]
end
于 2013-11-09T10:36:34.730 に答える
0

インスタンス メソッドを追加しますが、次のコードを使用します。

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

[0..-3] を実行する必要がある理由はわかりませんが、このコードを join('') の後に追加できます。しかし、部門があるかどうかも確認する必要があると思います。

于 2013-11-09T11:55:57.707 に答える