我已经生成:
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
为空
我找不到我的错误。
也欢迎改进代码的提示:)
答案 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_id
将nil
分配@post.event_locations.build(name: '123')
您使用city_id
构建它,post_id
将被分配,nil
将为@post.event_times.build(name: '123', city_id: @post.id)
。因此,最好的方法是自己指定其中一列,例如UITableViewController