Ruby on rails 3 与Rails 3中遗留数据库的简单关联?
我正在处理一个遗留数据库,同时也在阅读Rails 我有两个模型。Ruby on rails 3 与Rails 3中遗留数据库的简单关联?,ruby-on-rails-3,model,associations,model-associations,legacy-database,Ruby On Rails 3,Model,Associations,Model Associations,Legacy Database,我正在处理一个遗留数据库,同时也在阅读Rails 我有两个模型。日记模型和动物模型 日记.rb class Diary < ActiveRecord::Base establish_connection :premvet attr_accessible :DiaryNo ,:DiaryName, :DiaryDate, :SlotHour, :TotalSlots, :BlockSlots, :BlockBooked, :FreeSlot, :BookedSlot self
日记
模型和动物
模型
日记.rb
class Diary < ActiveRecord::Base
establish_connection :premvet
attr_accessible :DiaryNo ,:DiaryName, :DiaryDate, :SlotHour, :TotalSlots, :BlockSlots, :BlockBooked, :FreeSlot, :BookedSlot
self.table_name = 'diary'
self.primary_key = 'DiaryNo'
has_many :animals, :foreign_key => 'DiaryQueue'
end
class Animal < ActiveRecord::Base
establish_connection :premvet
self.table_name = 'animal'
self.primary_key = 'PVID'
attr_accessible :AddedBy, :Age, :AnimalBFAmount, :AnimalBalance, :AnimalName, :Archive, :BillType, :Breed, :ChronicStatus, :Class, :Classification, :ClientKey, :Colour, :Date1, :DateOfBirth, :DateofBirth, :Dead, :DiaryQueue, :DiscField, :DrugsAtCost, :DrugsNoVAT, :ESDAmount, :ESDType, :FNote, :FirstRegisteredDate, :Height, :IDNumber, :Insured, :InsuredWith, :IsClient, :IsClientDate, :IsMaster, :LastBilledAmount, :LastBilledDate, :LastConsDate, :LastContributionDate, :LastPaidDate, :LastWeightDate, :Locked, :LoyaltyMultiplier, :LoyaltyPoints, :MR_Flag_0, :MR_Flag_1, :MR_Flag_10, :MR_Flag_11, :MR_Flag_12, :MR_Flag_13, :MR_Flag_14, :MR_Flag_15, :MR_Flag_2, :MR_Flag_3, :MR_Flag_4, :MR_Flag_5, :MR_Flag_6, :MR_Flag_7, :MR_Flag_7, :MR_Flag_8, :MR_Flag_9, :Mileage, :Neutered, :NextApptDate, :ORT, :OldSex, :Opt_Flag_0, :Opt_Flag_1, :Opt_Flag_2, :Opt_Flag_3, :Opt_Flag_4, :Opt_Flag_5, :Opt_Flag_6, :Opt_Flag_7, :PVID, :PreferredContact, :PreferredUser, :Ref1, :RefPrac, :ReferredBy, :SSDType, :SeenInPeriod, :SendBill, :Sex, :SiteAnimal, :Species, :Status, :SurcAmount, :SurcType, :SurgeryNumber, :TBU, :TOSAmount, :TOSDrugs, :TOSFees, :TOSType, :Weight
belongs_to :client, :foreign_key => 'ClientKey'
belongs_to :diary, :foreign_key => 'DiaryNo'
end
@animates\u todayspaints
方法如下所示:
def appointments
@animals_todaysappointments = Animal.where('DATE(NextApptDate) = ?', Date.today).page(params[:page]).per_page(15).order('NextApptDate ASC')
respond_to do |format|
format.html # index.html.erb
end
end
如果我加上:
delegate :DiaryName, :to => :diary
对于动物模型,我得到以下错误:
Animal#DiaryName delegated to diary.DiaryName, but diary is nil: #
每个动物记录的日记队列值介于0和10之间,日记表有许多行,例如:
DiaryNo DiaryName DiaryDate SlotHour TotalSlots BlockBooked FreeSlot BookedSlot
--------------------------------------------------------------------------------------
1 Morning 2012-07-16 9 18 0 0 18
有些行具有相同的日记编号,但它们也具有相同的日记名称。只有日记日期、SlotHour、TotalSlots、BlockBooked、FreeSlot和BookedSlots在这些行中改变
为了尝试防止出现错误,我在视图中添加了以下内容:
<% unless animal.DiaryName.nil? %>
<td><%= animal.DiaryName %></td>
<% else %>
<td><%= animal.DiaryQueue %>
<% end %>
我做错了什么?根据以上答案,您可能需要将Animal中的“归属”方法更改为以下内容:
belongs_to :diary, :foreign_key => "DiaryQueue", :primary_key => "DiaryNo"
在您当前的实现中,您的模型将尝试将
Animal#DiaryNo
与Diary#DiaryNo
进行匹配,而您所说的是将Animal#DiaryQueue
与Diary#DiaryNo进行匹配,您说它失败了,但出现了异常错误。你能发布所引发的全部异常吗?抱歉,只是在我的问题中添加了它。似乎找不到动物记录的相关日记(Dairy?)记录。你确定记录在那里吗?动物记录有一个日记队列值,它与日记表中的日记号匹配。日记表只是一个“查找/引用”表,如中所示,我正在使用它将日记队列的值转换为日记名。那太好了,谢谢,我没有意识到你可以设置外键和主键。谢谢
Animal#DiaryName delegated to diary.DiaryName, but diary is nil: #
DiaryNo DiaryName DiaryDate SlotHour TotalSlots BlockBooked FreeSlot BookedSlot
--------------------------------------------------------------------------------------
1 Morning 2012-07-16 9 18 0 0 18
<% unless animal.DiaryName.nil? %>
<td><%= animal.DiaryName %></td>
<% else %>
<td><%= animal.DiaryQueue %>
<% end %>
Animal#DiaryName delegated to diary.DiaryName, but diary is nil: #
belongs_to :diary, :foreign_key => "DiaryQueue", :primary_key => "DiaryNo"