【发布时间】:2023-08-09 08:11:01
【问题描述】:
所以我正在开展一个项目,其中有一些任务构成了寻宝游戏。因此,当用户单击特定搜寻时,我希望 show.html.erb 文件显示搜寻以及与该搜寻相关的任务。两种模型(Hunt.rb 和 Task.rb)彼此之间都有“has_and_belongs_to_many”关系。我的控制器最初有这段代码,但它显示了数据库中的每个任务,而不仅仅是与特定狩猎相关的任务。
def show
@hunt = Hunt.find(params[:id])
@title = @hunt.name
@tasks = Task.paginate(:page => params[:page])
end
所以我尝试了这个。
def show
@hunt = Hunt.find(params[:id])
@title = @hunt.name
@tasks = @hunt.tasks.paginate(:page => params[:page])
end
然后它抛出了这个错误:
ActiveRecord::StatementInvalid in Hunts#show
Showing /****/views/hunts/show.html.erb where line #10 raised:
Mysql2::Error: Table '***_development.hunts_tasks' doesn't exist: SELECT `tasks`.* FROM `tasks` INNER JOIN `hunts_tasks` ON `tasks`.`id` = `hunts_tasks`.`task_id` WHERE `hunts_tasks`.`hunt_id` = 100 LIMIT 30 OFFSET 0
这里是 show.html.erb:
<h1>Show Hunt</h1>
<table>
<tr>
<td class="main">
<h1>
<%= @hunt.name %>
</h1>
<ul>
<% @tasks.each do |task| %>
<%= render task %>
<% end %>
</ul>
</td>
</tr>
</table>
知道我在搞砸什么吗?
【问题讨论】:
-
您是否创建了
hunts_tasks连接表。 -
您是否创建了
hunts_tasks表?我相信has_and_belongs_to_many要求您仍然创建一个表来表示关系。在这种情况下,它只是一个带有hunt_id和task_id的简单表。见documentation
标签: ruby-on-rails many-to-many associations rails-activerecord has-and-belongs-to-many