Rails 3.2基本关系has_many

时间:2012-07-05 18:40:52

标签: ruby-on-rails-3 activerecord

我已经重新阅读了关联的导轨指南,但仍然撞到墙上。我已经看到Stack Overflow上的一些高级问题,我无法确定它们是否能解释我的问题。也许我还没有弄清楚这一点。请告诉我我没看到的内容。

我有一个School.rb,它有很多活动,有很多场地。每个活动和场地都属于学校。我正在尝试将场地与活动联系起来。他们与学校有关,因为他们有匹配的school_id。学校的名称很容易应用于Event#show和Venue#show中。诀窍是我如何制作事件控制器以使用school_id在Event#show页面中拉出Venue的附件?

我的尝试一直不见了,所以我想我可能要把事件发送到Venue和Venue has_many事件。这是正确的做法吗?

我尝试<%= @ event.venue.address%>但是对于nil:NilClass'

,它的'undefined method`address'失败了

也许我在思考它,但正如我上面提到的,我不知道问题是否正确。如果我用英语术语来表达我的查询,那就是“抓住场地的实例,其school_id与当前/活动事件的school_id匹配。”那有意义吗?我试图在导轨指南中找到与此相近的东西并试图这样做:

 @venues = Venue.where(:school_id => @school_id)

[]的未定义方法`address':ActiveRecord :: Relation。场地地址在场地模型中。

这是我的学校.rb:

 class School < ActiveRecord::Base

  has_many :events, :dependent => :destroy   
 has_many :venues, :dependent => :destroy
 has_and_belongs_to_many :users
  belongs_to :event   belongs_to :venue
  def self.fetch_for_name(_name)
 school = self.new(:name => _name)
  end 
 end

这是我的event.rb:

class Event < ActiveRecord::Base

resourcify
belongs_to :school
 belongs_to :venue
 end

这是我的Venue.rb:

 class Venue < ActiveRecord::Base

  resourcify
  belongs_to :school
   has_many :events

   end

请帮助我克服这个婴儿步骤,山姆

2 个答案:

答案 0 :(得分:0)

您需要查看指南的this部分,并确保您在场地和活动之间建立了关系,如链接中所述......

答案 1 :(得分:0)

要完成您要求的确切事情,您需要在Venue中创建一个方法来查询给定事件。

class Venue < ActiveRecord::Base
  resourcify
  belongs_to :school
  has_many :events
  def self.venue_for_event(event)
    where("school_id = ?", event.school_id)
  end
end

但是,有一些问题需要询问您的模型。为什么学校有许多活动和场地,但也属于一个活动和场地?您尝试使用这些模型解决的问题是什么?如果学校是将场地和事件放在一起的粘合剂,那么考虑将它作为has_many, :through relationshuip中的连接模型