我希望为用户创建评论,如何更好地创建数据库和活动记录关联,我正在考虑创建模型评论,评论表与内容字符串和表users_users与2字符串user_id,user_id,第一个创建评论的字符串和第二个是谁创建了评论,还是这个错误的方式?
答案 0 :(得分:3)
我认为您可以将此限制为一个新模型UserReview
,例如:
rails g model UserReview for_user:references by_user:references content:text stars:integer
具有两个范围的模型定义:
def UserReview
belongs_to :for_user, class_name: 'User'
belongs_to :by_user, class_name: 'User'
scope :reviews_for, ->(user) { where("for_user = ?", user) }
scope :reviews_by, ->(user) { where("by_user = ?", user) }
end
范围方法可以更轻松地查询评论,例如:
user_reviews = UserReview.reviews_for(current_user)
答案 1 :(得分:3)
虽然你的问题很模糊,但我猜你是Rails的新手,所以我想我会为你写这篇文章
用户has_many评论
听起来像我需要ActiveRecord associations
的帮助,这将允许您创建用户评论
具体来说,您需要使用has_many
relationship,以便user has_many reviews
:
您可以设置2个这样的模型:
#app/models/review.rb
class Review < ActiveRecord::Base
belongs_to :user
end
#app/models/user.rb
class User < ActiveRecord::Base
has_many :reviews
end
这将允许您像这样调用用户的ActiveRecord对象:
#app/controllers/users_controller.rb
def index
@user = User.find(params[:id])
@reviews = @user.reviews
end
将评价保存给用户
通过此设置,您可以将评论保存到特定用户
要执行此操作,您将能够使用accepts_nested_attributes_for
或在reviews
控制器中,您可以合并当前用户的user_id
以将值分配给“外键“(user_id
)列ActiveRecord在其关联中使用
后者是最直接的解释,所以我会给你一个演示:
#app/controllers/reviews_controller.rb
def new
@review = Review.new
end
def create
@review = Review.new(review_params)
@review.save
end
private
def review_params
params.require(:review).permit(:title, :body).merge(:user_id => current_user.id)
end
#app/views/reviews/new.html.erb
<%= form_for @review do |f| %>
<%= f.text_field :title %>
<%= f.text_field :body %>
<% end %>
这会保存您发布的带有附加user_id
的评论,然后您可以使用@user.reviews
希望这有帮助吗?