rails 4用户评论用户如何操作

时间:2013-11-19 08:53:53

标签: ruby-on-rails ruby-on-rails-4

我希望为用户创建评论,如何更好地创建数据库和活动记录关联,我正在考虑创建模型评论,评论表与内容字符串和表users_users与2字符串user_id,user_id,第一个创建评论的字符串和第二个是谁创建了评论,还是这个错误的方式?

2 个答案:

答案 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

has_many relationship

您可以设置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

之类的内容进行调用

希望这有帮助吗?