gpt4 book ai didi

ruby-on-rails - 从 Rails 中的数据库检索数据?

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:39 26 4
gpt4 key购买 nike

我的项目中有两个名为 events 和 trainers 的表。events 表包含培训师的 ID。我有一个下拉菜单,其中包含培训师的姓名,如下所示。

<% form_tag "/events/find_trainer" do %>
<%= collection_select("event", "trainer", @trainers , :id, :name, {:prompt => true}) %>
<%= submit_tag "search" %>
<%end%>

然后我在 Controller 中创建了 find_trainer 方法来检索事件表的数据。

def find_trainer
@events=Event.find(:all, :conditions=> { :trainer=>params[:id]})
end

这不会从数据库中检索任何内容。我使用的是 postgresql 和 ruby​​ 1.8.7 以及 rails 2.3.8 版本。我不明白我的错..任何人都可以帮助我吗?

最佳答案

如果你的关联是用 has_many 定义的,你就不需要那样使用 find

你只要找到培训师:

@trainer = Trainer.find_by_id(params[id])

然后可以访问它的所有事件

@trainer.events

为此,您需要在训练模型中工作:

has_many :events

在您的事件模型中:

belongs_to :trainer

和事件表中的 trainer_id 列

编辑

将 foreign_key 列命名为“trainer”是个坏主意,它打破了 Rails 的惯例,让您的生活更加困难。您可以像这样告诉 Rails 使用哪个列名:

has_many :events, :foreign_key => :trainer

belongs_to :trainer, :foreign_key => :trainer

但是您应该尽可能避免这种情况,而是更改您的迁移并重建您的数据库。此功能主要被认为允许使用旧项目中的数据库,而不是用 Rails 编写的。

此外,其他错误告诉您,params[:id] 中没有值。数据库中有夹具数据吗?

只是看看它是否有效,您可以从

开始
@trainer = Trainer.first

这需要第一个训练师然后

@trainer.events

应该可以工作,如果此培训师的任何事件存在。然后你可以找出 params[:id] 有什么问题,很可能是某些链接无法正常工作,可能是你的表单错误或者到你的 Controller 的路由有错误。

您一次尝试了太多事情,但没有确定基础是否有效。这就是我们通常在 Ruby on Rails 中进行测试驱动开发的原因。

首先设置Trainer模型。然后测试它,通过编写和加载 fixture 确保有训练器,并且 Rails 可以找到它们。

之后添加事件模型(以及一些夹具数据)。如果您不显式编写测试,那么至少使用 Rails 控制台(我认为它是 Rails 2.x 中的命令脚本/控制台)进行测试。只有当您 100% 确定它在模型级别上工作时,才开始编写 Controller 。这样一来,您在任何给定时刻只需处理一个错误。

关于ruby-on-rails - 从 Rails 中的数据库检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7170531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com