Rails 3,如何在创建主记录后添加关联记录(Books,Auto Add BookCharacter)
Rails新手…试图了解正确的做事方式……
在我的应用程序中,用户可以创建一本书(我有那个工作)
我想要发生的是当用户创建一本书时,一条记录被添加到BookCharacters表中,类似于(id,book.id,user.id,characterdescription.string。)
创建书籍后,创建它的用户应自动添加为第一个BookCharacter。 之后,用户可以根据需要手动添加/编辑任意数量的BookCharacters。 但最初我希望它们默认自动添加。
所以在我的Book控制器中,我有:
def create @book = Book.new(params[:book]) respond_to do |format| if @book.save ....
使用Rails,是否可以在保存书籍后添加这种逻辑? 就像是
Book.create( :creator => current_user.id)
我很感激帮助
要理解的重要事项是Rails使用ActiveRecord实现关系的约定。 一本书有很多字,每个字都属于一本书,所以:
class Book < ActiveRecordBase has_many :characters end class Character < ActiveRecordBase belongs_to :book end
Rails现在假设characters
表将有一个名为book_id
的外键,它与books
表有关。 要创建属于书籍的角色:
@book = Book.new(:name=>"Book name") @character = @book.characters.build(:name=>"Character name")
现在保存@book
时(假设@book
和@character
都有效),将在books
和characters
表中创建一行,并通过book_id
链接字符行。
要显示角色也属于用户,您可以将该关系添加到角色模型:
class Character < ActiveRecordBase belongs_to :book belongs_to :user end
因此,Rails现在期望characters
也具有名为user_id
外键,其指向users
表(其还需要User
模型)。 在创建角色时指定用户:
@book = Book.new(:name=>"Book name") @character = @book.characters.build(:name=>"Character name",:user=>current_user)
您还可以通过调用对象上的相应方法来分配外键:
@character.user = current_user
这一切都有效,因为它遵循Rails约定命名模型和表。 你可以脱离这些约定,但如果你这样做,你将更难学习Rails。
我更喜欢(如果User has_many Book):
def create @book = current_user.books.new(params[:book]) respond_to do |format| if @book.save …