Rails的用户评分,只能评价自己

时间:2015-12-12 12:44:42

标签: ruby-on-rails ruby rating

我正在尝试设置一个5星评级系统,以便用户可以评价其他用户。目前一切正常,(创建,删除,更新等......)但只有登录用户可以评价自己。我不能评价其他用户。我没有收到任何错误,它只是重定向到用户个人资料页面,但没有为该用户添加评级。

user.rb

class User < ActiveRecord::Base
has_many :reviews

review.rb

class Review < ActiveRecord::Base
  belongs_to :user
end

reviews_controller.rb

class ReviewsController < ApplicationController

 before_action :find_user
 before_action :find_review, only: [:edit, :update, :destroy]

 def new
   @review = Review.new
 end

 def create
   @review = Review.new(review_params)
   @review.user_id = current_user.id
   if @review.save
     redirect_to user_path(@user)
   else
     render 'new'
   end
 end

 def edit
 end

 def update
   if @review.update(review_params)
     redirect_to user_path(@user)
   else
     render 'edit'
   end
 end

 def destroy
   @review.destroy
   redirect_to user_path(@user)
 end

 private

 def review_params
   params.require(:review).permit(:rating, :comment)
 end

 def find_user
   @user = User.find(params[:user_id])
 end

 def find_review
   @review = Review.find(params[:id])
 end

end

_form然后在显示页面上呈现:

<%= simple_form_for([@user, @user.reviews.build]) do |f| %>
  <div id="rating-form">
    <label>Rating</label>
  </div>
  <%= f.input :comment %>
  <%= f.button :submit %>

<% end %>

<script>
  $('#rating-form').raty({
    path: '/assets/',
    scoreName: 'review[rating]'
  });
</script>

任何有助于此工作的帮助将非常感谢!!

1 个答案:

答案 0 :(得分:1)

这样做:

#config/routes.rb
resources :users do
   resources :reviews, only: [:new, :create]
end


#app/models/review.rb
class Review < ActiveRecord::Base
   belongs_to :user
   belongs_to :reviewed, class_name: "User", foreign_key: :reviewed_id
end

#app/controllers/reviews_controller.rb
class ReviewsController < ApplicationController
   def new
      @review = current_user.reviews.new
   end

   def create
      @review = current_user.reviews.new review_params
      @review.save
   end

   private

   def review_params
      params.require(:review).permit(:rating, :comment).merge(reviewed_id: params[:user_id])
   end
end

#app/views/reviews/new.html.erb
<%= form_for @review do |f| %>
    <%= f.number_field :rating %>
    <%= f.text_field :comment %>
    <%= f.submit %>
<% end %>

这意味着您必须在reviewed_id表中添加reviews列。

您可以使用url.com/users/:user_id/reviews/new

访问它

应用程序将自动填充user_idreviewed_id字段,因此其余代码应与升级一起使用。

你遇到的一个大问题是,你基本上是在录制user_id(大概是创建评论的人)......但是无法规定评论是谁< EM>约

以上代码为您解决了这个问题。