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都有效),将在bookscharacters表中创建一行,并通过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 …