Rails 用户评分,只能给自己评分
Rails user rating, can only rate myself
我正在尝试设置一个 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>
如能提供帮助,我们将不胜感激!
这样做:
#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 %>
这意味着您必须在 reviews
table 中包含一个 reviewed_id
列。
您将能够使用以下方式访问它:url.com/users/:user_id/reviews/new
该应用程序将自动填充 user_id
和 reviewed_id
字段,因此您的其余代码应该适用于升级。
你遇到的最大问题是你基本上是在记录 user_id
(大概是 创建 评论的人)......但无法规定评论是谁 about.
以上代码为您解决了这个问题。
我正在尝试设置一个 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>
如能提供帮助,我们将不胜感激!
这样做:
#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 %>
这意味着您必须在 reviews
table 中包含一个 reviewed_id
列。
您将能够使用以下方式访问它:url.com/users/:user_id/reviews/new
该应用程序将自动填充 user_id
和 reviewed_id
字段,因此您的其余代码应该适用于升级。
你遇到的最大问题是你基本上是在记录 user_id
(大概是 创建 评论的人)......但无法规定评论是谁 about.
以上代码为您解决了这个问题。