与同一模型的双重关系

时间:2016-01-10 01:29:40

标签: ruby-on-rails

我试图在同一个表上建立双重关系但我无法访问其他表中的数据。

我为用户设置了一个设计表,还有一个设有"他们的帖子"。

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

我所做的关系中的问题是什么?

1 个答案:

答案 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>