操作控制器:异常 - 找不到ID

时间:2010-04-27 17:38:26

标签: ruby-on-rails database exception

我正在慢慢掌握Rails,感谢一些人,我现在已经基本掌握了数据库关系和关联等。您可以在此处查看我之前的问题:Rails database relationships

我已经设置了我的应用程序模型,其中包含所有必需的has_one和has_many:through等。但是当我去添加一个kase并从下拉列表中选择公司时 - 它似乎并没有将公司ID分配给kase。

您可以在此处查看应用程序和错误的视频:http://screenr.com/BHC

您可以在此处的Git回购中查看应用程序和相关源代码的完整细分:http://github.com/dannyweb/surveycontrol

如果有人能说清楚我的错误,我会非常感激!

谢谢,

丹尼

2 个答案:

答案 0 :(得分:1)

您已将Kase和Company模型设置为一对一关系(请参阅http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)。这可能不是你想要的。也许如果你能解释你想要的关系,我可以告诉你你的错误在哪里?

class Company < ActiveRecord::Base
  has_many :kases
  has_many :people
end

class Kase < ActiveRecord::Base
  belongs_to :company    # foreign key: company_id
  has_and_belongs_to_many :people    # foreign key in join table
end

class Person < ActiveRecord::Base
  has_and_belongs_to_many :kases    # foreign key in join table
end

仅显示相关部分。这应该是朝着正确方向迈出的一步。您将需要一个用于多对多关系的连接表,或者使用“has_many:through”对其进行建模。取决于您是否需要在连接上存储其他属性。有关详细信息,请参阅上面的链接。

答案 1 :(得分:1)

我相信它应该是

class Company < ActiveRecord::Base
   has_many :people
   has_many :kases
end

class Kase < ActiveRecord::Base
   belongs_to :company
   belongs_to :person
end

class Person < ActiveRecord::Base
   belongs_to :company
   has_one :kase
end

在您的视图中(app/views/kases/new.html.erb),您有

<li>Company Select<span><%= f.select :company_id, Company.all %></span></li>

尝试将选择部分更改为

<%= f.select :company_id, Company.all.collect {|m| [m.name, m.id]} %>

<强>建议

我还注意到你的控制器中有四种方法可以按状态查找Kases。您可以使用named_scope在模型中执行此操作。就像这样:

named_scope :active, :conditions => {:kase_status => 'Archived'}

然后,只要您只需要显示有效的Kases,就可以调用Kase.active。其他状态也一样。