在我的项目中有一个用户模型和帖子模型。在该帖子属于用户(对于帖子的作者)和has_and_belongs_to_many:帖子(对于已读和未读状态)。
如何使用current_user创建新帖子。我是否需要合并参数中的current_user值。如果我使用@ user.posts.new(params)查找连接表。还有其他办法吗?
答案 0 :(得分:0)
在rails关联中,不需要将其命名为与模型相同的名称。它只是一种惯例,可以在没有任何配置的情况下创建关联。
创建别名关联非常简单:
class Post < ApplicationRecord
belongs_to :author, class_name: 'User'
end
class User < ApplicationRecord
has_many :posts, foreign_key: 'author_id'
end
您甚至可以使用此技术与同一个表建立多个关联:
class Post < ApplicationRecord
belongs_to :author, class_name: 'User'
belongs_to :editor, class_name: 'User'
end
要跟踪哪些用户访问了哪些页面,但您需要一个连接表,因为这是一个多对多关联:
class Post < ApplicationRecord
has_many :visits
has_many :visitors, through: :visits
source: :user
end
class Visit < ApplicationRecord
belongs_to :user
belongs_to :post
end
class User < ApplicationRecord
has_many :visits
has_many :visited_pages, through: :visits
source: :page
end
如何使用current_user创建新帖子?
您可以这样做:
@post = current_user.posts.new(posts_params)
或者:
@post = Posts.new(posts_params) do |p|
p.user = current_user
end
如果您需要将用户的参数与其他值组合在一起,然后使用params哈希进行整理,那么使用类似于后面的块是一种更清晰的技术。