我正在慢慢掌握Rails,感谢一些人,我现在已经基本掌握了数据库关系和关联等。您可以在此处查看我之前的问题:Rails database relationships
我已经设置了我的应用程序模型,其中包含所有必需的has_one和has_many:through等。但是当我去添加一个kase并从下拉列表中选择公司时 - 它似乎并没有将公司ID分配给kase。
您可以在此处查看应用程序和错误的视频:http://screenr.com/BHC
您可以在此处的Git回购中查看应用程序和相关源代码的完整细分:http://github.com/dannyweb/surveycontrol
如果有人能说清楚我的错误,我会非常感激!
谢谢,
丹尼
答案 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
。其他状态也一样。