我试图在同一个表上建立双重关系但我无法访问其他表中的数据。
我为用户设置了一个设计表,还有一个设有"他们的帖子"。
Reclamacoes表
("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"usuario_reclamante_id" integer,
"usuario_reclamado_id" integer,
"titulo" varchar,
"conteudo" text,
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL)
而且,模型reclamacao
class Reclamacao < ActiveRecord::Base
belongs_to :user, foreign_key: "usuario_reclamante_id"
belongs_to :user, foreign_key: "usuario_reclamado_id"
end
用户模型
has_many :reclamacao
在视图中,当我尝试访问用户电子邮件时,请执行以下操作:
<% @allReclamacoes.each do |reclamacao| %>
<tr>
<td><%= reclamacao.titulo %></td>
<td><%= reclamacao.conteudo %></td>
<td><%= reclamacao.usuario_reclamante_id.email %></td>
<td><%= reclamacao.usuario_reclamado_id %></td>
</tr>
<% end %>
元素的创建:
def create
@reclamacao = Reclamacao.new reclamacao_params
@reclamacao.usuario_reclamante_id = current_user
if @reclamacao.save
flash[:success] = "criado com sucesso"
else
flash[:error] = "falha ao criar"
end
redirect_to paginainicial_path
end
而不是
未定义的方法`电子邮件&#39;为零:NilClass
我所做的关系中的问题是什么?
答案 0 :(得分:2)
首先,您将两个belongs_to
关联命名为相同,这肯定会导致问题。您需要明确命名其中一个或两个,如下所示:
class Reclamacao < ActiveRecord::Base
belongs_to :reclamente, class_name: "User", foreign_key: "usuario_reclamante_id"
belongs_to :reclamado, class_name: "User", foreign_key: "usuario_reclamado_id"
end
通过将命名关联与外键名称相匹配,可以进一步简化。然后你可以跳过外键部分:
class Reclamacao < ActiveRecord::Base
belongs_to :usuario_reclamente, class_name: "User"
belongs_to :usuario_reclamado, class_name: "User"
end
同样,您需要在用户端设置2个单独的has_many
关联。
另外,这条线错了:
@reclamacao.usuario_reclamante_id = current_user
您需要将id设置为current_user的id:
@reclamacao.usuario_reclamante_id = current_user.id
..或者更好的是,使用命名关联:
@reclamacao.usuario_reclamante = current_user
最后,要访问视图中的电子邮件,您需要使用指定的关联:
<td><%= reclamacao.usuario_reclamante.email %></td>