Rails新手...试图了解正确的做事方式...
在我的应用程序中,用户可以创建一本书(我正在使用该书)
我想发生的是,当用户创建一本书时,一条记录被添加到BookCharacters表中,类似于(id,book.id,user.id,characterdescription.string)。
创建书籍时,创建该书籍的用户应自动添加为第一本书。之后,用户可以根据需要手动添加/编辑任意数量的BookCharacter。但是起初我希望默认情况下自动添加它们。
所以在我的Book Controller 中,我有:
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
链接字符行。要显示角色也属于用户,可以将该关系添加到Character模型中:
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。
关于ruby-on-rails - Rails 3,如何在创建主记录后添加关联记录(Books,自动添加BookCharacter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3739158/