我的两个模型是User has_many :books
和Book belongs_to :user
。
users
表只有name
列,而books
表有users_id
和title
。
这是我实际上应该如何使用它们吗?填充用户表后,如何通过搜索其姓名而不是ID列来完成添加特定用户的书籍?我知道这很简单,但我真的无法在Google上找到它,或者重新阅读我的书籍并重新观看我的Lynda视频;我知道信息必须在某处,但它现在已经完全煎死了我的大脑,而且我非常困惑。我非常习惯使用SQL并且学习使用ActiveRecord而不是想用左手写字。
我想要做的是在SQL中等同于INSERT INTO books (title, users_id) VALUES ("Wolves of the Calla", (SELECT id FROM users WHERE name = 'Sarah'));
。
答案 0 :(得分:1)
找到具有给定名称的用户,然后使用该关联创建一个包含找到的user_id
的书user = User.where(:name => "Sarah").first
user.books.create(:title => "Wolves of the Calla")
答案 1 :(得分:1)
正如Association Basics Guide中所述,你需要这样的东西:
createdBook = @user.books.create(title: "Wolves of the Calla")
答案 2 :(得分:0)
这可以在Rails Documentation中找到。如果你还没有这样做,那么值得一读。
关于这个问题:
...我该如何为特定用户添加图书...
您可以通过多种方式进行操作,但要记住的关键是has_many
和belongs_to
方法为您创建关联方法。通过这种方式,您可以检索并添加到对象的关联; Rails将负责处理外键等,只要它们按照命名约定命名(看起来你已经这样做了)
举一个简单的例子,将书籍添加到用户的书籍集合中,就像这样:
@user = User.where(name: "Sarah").first
@user.books.create(title: "Wolves of the Calla")
答案 3 :(得分:0)
#Rails 4 syntax
#Approach 1
@user = User.find_by(name: 'Sarah')
@book = @user.books.create(title: 'Wolves of the Calla')
#Alternatively
@user = User.find_by(name: 'Sarah')
@user.books << Book.create(title: 'Wolves of the Calla')
#Alternatively
@user = User.find_by(name: 'Sarah')
@book = Book.create(title: 'Wolves of the Calla')
@user.book_ids += [@book.id]