Rails:来自一个表/模型的两个引用

时间:2015-11-17 01:21:23

标签: ruby-on-rails ruby ruby-on-rails-4 associations rails-activerecord

我已经生成:

rails g model EventTime name:string start_time:datetime post:references city_id:integer

和模特:

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :event_times

class EventTime < ActiveRecord::Base
  belongs_to :post
  belongs_to :city, class_name: 'Post', foreign_key: "city_id"

Post表中,我们有一行值city_id

但是当我尝试在这里创建一个新的event_time时:

@post = Post.find(1)
  @event = @post.event_times.build(name: '123')
  @event.save

保存后,我只获得post_id已保存的权限,city_id为空

我找不到我的错误。

也欢迎改进代码的提示:)

1 个答案:

答案 0 :(得分:1)

Post模型中,与事件时间的has_many关系引用以post_id作为外键的事件。我不知道你为什么要在两列中存储相同的post_id。但要这样做,您应该按如下方式编辑代码。

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :event_times
  has_many :event_locations, foreign_key: "city_id", class_name: "EventTime"
end

如果您使用EventTime构建@post.event_times.build(name: '123')课程的实例,则会在post_id中分配帖子ID,而city_idnil分配@post.event_locations.build(name: '123')您使用city_id构建它,post_id将被分配,nil将为@post.event_times.build(name: '123', city_id: @post.id)。因此,最好的方法是自己指定其中一列,例如UITableViewController