has_many:通过不提供从base到 _id的访问

|| 型号代码
class Location < ActiveRecord::Base
  attr_accessible :day_tokens, :name, :address, :phone
  has_many :locavailability
  has_many  :dayavailables, :through => :locavailability
  attr_reader :day_tokens
  def day_tokens=(ids)
    self.locavailability.dayavailable_id= ids.split(\",\")
  end
end

class Dayavailable < ActiveRecord::Base
  has_many  :locavailability
  has_many  :locations, :through => :locavailability
end

class Locavailability < ActiveRecord::Base
  attr_accessible :dayavailable_id, :location_id
  belongs_to :dayavailable
  belongs_to :location
end
数据库列:
locations: id, name, address, phone, hours, created_at, updated_at
dayavailables: id, day, time, created_at, updated_at
locavailabilities: id, location_id, dayavailable_id, created_at, updated_at
错误
irb(main):004:0> l = Location.find(1)
=> #<Location id: 1, name: \"test\", address: \"123 Fake Street\", phone: \"23443234324\", hours: \"M-F 9 - 5\", created_at: \"2011-05-16 04:56:31\", updated_at: \"2011-05-16 04:56:31\">
irb(main):005:0> l.class
=> Location(id: integer, name: string, address: string, phone: string, hours: string, dentistry_id: integer, created_at: datetime, updated_at: datetime)
irb(main):006:0> l.locavailability
=> []
irb(main):007:0> l.dayavailable_id
NoMethodError: undefined method `dayavailable_id\' for #<Location:0xb6af7c40>
    from /usr/lib/ruby/gems/1.8/gems/activemodel-3.0.0/lib/active_model/attribute_methods.rb:364:in `method_missing\'
    from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.0/lib/active_record/attribute_methods.rb:46:in `method_missing\'
    from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.0/lib/active_record/attribute_methods.rb:44:in `send\'
    from /usr/lib/ruby/gems/1.8/gems/activerecord-3.0.0/lib/active_record/attribute_methods.rb:44:in `method_missing\'
    from (irb):6
Location类不应该访问to3ѭ?我正在github上的railscasts第258集中的代码 我想念什么?     
已邀请:
为什么
Location
应该可以访问
dayavailable_id
? 如果您提供true,则
dayavailable_id
locavailabilities
的列:   数据库列:      位置:ID,名称,地址,电话,小时,created_at,updated_at      可用日期:id,日期,时间,created_at,updated_at      位置可用性:id,location_id,dayavailable_id,created_at,updated_at 尝试这个: 更新
l = Location.find(1)
l.dayavailable_ids #=> Returns an array of the associated objects’ ids
但是,如果您呼叫
dayavailable_id
,它应该是表格的一列。 因此,“ 10”将执行以下数据库查询:
select id from dayavailables d
inner join locavailabilities l on l.dayavailable_id = d.id 
where l.location_id = 1 
但是Locavailability.find(1).dayavailable_id将执行此数据库查询(并非如此,仅是为了提高可读性):
select dayavailable_id from locavailabilities l
where l.location_id = 1 
    

要回复问题请先登录注册