如何在Ruby on Rails中创建中间关系中的行

时间:2012-10-02 05:12:57

标签: ruby-on-rails

我有表用户,位置和关注,其中用户有多个位置:through => :如下。跟随belongs_to用户和位置。我想在Follows表中添加一行 - 也就是说,在用户和位置之间创建一个Follow关系。

我不知道该怎么做,或者我正在实施Follows right:

class CreateFollows < ActiveRecord::Migration
   def change
     create_table :follows |do| t
      t.references :user_id
      t.references :location_id
      t.timestamps
     end
   end
end

我试图用来添加Follows关系的代码,给定userid和locationid,是

newFollow = Follow.new(:user_id => userid, :location_id => locationid)
newFollow.save

我收到错误未知属性:user_id。

任何想法?我真的被卡住了。非常感谢!

1 个答案:

答案 0 :(得分:4)

在迁移过程中,references需要没有_id的字段名称,然后会向其添加_id。现在,您要创建两列:user_id_idlocation_id_id

而不是这些线......

t.references :user_id
t.references :location_id

......你需要这些:

t.references :user
t.references :location

一旦你修改了列名......

您不必在“直通”表中手动创建记录。如果您有一个用户,并且您有一个位置,并且您的关联设置正确(has_many follows; has_many :locations, through: :follows),则可以使用

user.locations << location

这将自动创建加入记录。