我正在开发一个铁路应用程序,为营地登记露营者。首先,您使用您的姓名,电子邮件等进行注册。一旦您的个人资料制作完成,您就可以注册营地。如果营地尚未满,则立即注册。如果它已满,那么你就被列入候补名单。现在我有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很陌生,所以对我很轻松。
答案 0 :(得分:0)
了解HABTM协会的方向。
所以
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