【问题标题】:Rails 3.2 basic relationship has_manyRails 3.2 基本关系 has_many
【发布时间】:2012-07-05 18:40:51
【问题描述】:

我已经重读了rails guide to associates,但我仍然把我的头撞到墙上。我在 Stack Overflow 上看到了一些高级问题,但无法确定它们是否能阐明我的问题。也许我还没有把我的思想包裹在这件事上。请告诉我我没有看到什么。

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

我的尝试不断丢失,所以我开始思考也许我必须让 Event belongs_to Venue 和 Venue has_many Events。这是正确的做法吗?

我尝试 但失败并出现 'undefined method `address' for nil:NilClass'

也许我想多了,但正如我上面提到的,我知道的不够多,无法提出正确的问题。如果我用英语进行查询,它将是“获取其 school_id 与当前/活动事件的 school_id 匹配的 Venue 实例。”那有意义吗?我试图在 Rails 指南中找到接近的东西并尝试这样做:

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

[]:ActiveRecord::Relation 的未定义方法“地址”。场地地址在场地模型中。

这是我的 school.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

请帮我克服这一步,山姆

【问题讨论】:

  • 您能发布您实际的活动记录关系吗?它会让一切变得简单一百万倍
  • 我编辑了我的答案以更直接地回答你的问题

标签: ruby-on-rails-3 activerecord


【解决方案1】:

您需要查看指南的this 部分,并确保您有has_many through 地点和事件之间的关系,如链接中所述...

【讨论】:

    【解决方案2】:

    要执行您所要求的确切操作,您需要在 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, :throughrelationshiphuip 中的连接模型

    【讨论】:

    • 没有理由让学校belongs_to事件和地点来确保我可以相互利用数据,主要是由于我的经验不足。问题是我想让学校成为其活动和场地之间的统一者。并且对于场地中的数据,比如一个阿迪,出现在学校的活动中。我想了解如何更深入地了解。
    • 谢谢。我已将 school.rb 更改为 has_many :venues, :through => :events。我不确定如何在控制器中使用场地_for_event 以及它将如何显示在 event#show 中?遵循rails guide(physician.patients = patients)我尝试了:school.events = events,但失败了。我想知道语言是如何与模型/控制器/视图交互的,并且对基础知识感到困惑。
    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多