Rails - 在同一模型上有多个&has -many到'关联

时间:2017-12-02 03:19:48

标签: html ruby-on-rails database web-applications associations

我正在开发一个铁路应用程序,为营地登记露营者。首先,您使用您的姓名,电子邮件等进行注册。一旦您的个人资料制作完成,您就可以注册营地。如果营地尚未满,则立即注册。如果它已满,那么你就被列入候补名单。现在我有4个模特:露营者(姓名,电子邮件等),营地(姓名,地点等),报名和候补名单。 这个想法是让一个露营者能够登记到许多难民营,显然这个营地有许多露营者登记或候补。这是我的课程:

# camper.rb
has_many :enrolled_in, :class_name => 'Camps', through: :enrollments, dependent: :destroy
has_many :waitlisted_in, :class_name => 'Camps', through: :waitlists, dependent: :destroy

# camp.rb
has_many :enrolled_campers, :class_name => 'Camper', through: :enrollments
has_many :waitlisted_campers, :class_name => 'Camper', through: :waitlists

我无法通过视图访问这些模型。这是show.html.erb的样子:

<!-- Listing camps -->
<h2>Camps</h2>
<p>
  <strong>Name:</strong>
  <%= @camper.enrolled_in.name %> <!-- This is where I get the error -->
</p>

<!-- Adding camps -->
<h2>Add a camp:</h2>
<%= form_with(model: [@camper, @camper.enrolled_in.build ]) do |form| %>
<p>
  <%= form.label :name %><br>
  <%= form.text_field :name %>
</p>
<p>
  <%= form.submit %>
</p>
<% end %>

但我收到以下错误:

  

Campers中的ActiveRecord :: HasManyThroughSourceAssociationNotFoundError#show

     

找不到源关联&#34; enrolled_in&#34;或:模型注册中的enrolled_in。尝试&has 39:has_many:enrolled_in,:through =&gt; :enrollments,:source =&gt; &#39 ;.它是营地还是露营者之一?

老实说,我无法说出出了什么问题。我对数据库和rails很陌生,所以对我很轻松。

1 个答案:

答案 0 :(得分:0)

了解HABTM协会的方向。

  1. 这将使您的代码更清晰。
  2. 您将拥有:after_add和:after_destroy操作,它们将始终跟踪模型更改(甚至直接插入外键,与同名的has_many回调不同。)
  3. 所以

    class Camper
      has_and_belongs_to_many :waitlists, after_add: :check_camp_ready_to_start_as_example
      has_and_belongs_to_many :enrolllists
    end
    
    class Waitlist
      belongs_to :camp
      has_and_belongs_to_many :campers
    end 
    
    class Enrolllist
      belongs_to :camp
      has_and_belongs_to_many :campers
    end
    
    class Campl
      has_many :enrolllists
      has_many :waitlists
    end
    

    如何创建此类迁移(需要创建连接表),您可以阅读here