两种模型的Ruby on Rails关系

时间:2012-11-23 14:27:18

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord rails-migrations

我有两种不同的模型。

项目模型

class Item < ActiveRecord::Base
    belongs_to :category
    attr_accessible :make, :model, :name, :purchasedfrom, :qrcode, :serialnumber, :category_id
end

活动模型

class Event < ActiveRecord::Base
    belongs_to :category
    attr_accessible :name, :location_id, :category_id
end

我无法弄清楚如何执行以下操作:

  • Event有多个Item,可以在Event
  • Event历史记录仍显示特定事件的Items

  • 将显示来自活动的项目: localhost / event /:id / items

我无法弄明白这一点。如果我能在这个问题上找到一些方向,我将不胜感激!提前感谢您的所有帮助。

我已经看到使用:through,我相信我必须在这里使用。

3 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你可以在这里写一些类似于事件模型的内容。

class Event
  def items
    category.items
  end
end

然后在控制器中,

@event = Event.find(params[:id])
@items = @event.try(:items) 

答案 1 :(得分:0)

如果一个Category可以包含多个Events,我认为您必须在event_id中添加Item,以便能够准确了解已发送的Items只有一个Event。 (在这种情况下,为此添加关系)。

如果一个Event可以在多个Item

上,则可以在ItemEvents之间以及has_and_belongs_to_many之间加入表格

编辑:

如果是这样,请添加表格events_items,关系has_and_belongs_to_many :itemsEvent中的:eventsItem中的has_and_belongs_to_many),然后阅读文档< / strong> for Items

否则,如果您正在查找某个Event上的Items,您会发现所有<{strong> {{1}上的所有Events与您正在调查的Category具有相同的Event

答案 2 :(得分:0)

我认为你想要做的是:

class Item < ActiveRecord::Base
    belongs_to :event
end  

和事件:

class Event < ActiveRecord::Base
    has_many :items
end

然后您应该可以通过调用以下方式查看事件的项目:

@event = Event.find_by_id(:id)
@event.items.all