如何在创建过程中将已创建评论的所有权授予其他用户



我正在尝试制作一个用户评论网站。我需要将创建的评论的所有权授予另一个用户。这是我的代码

_表单,html.erb文件

<%= form_with(model: review, local: true) do |form| %>
<% if review.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(review.errors.count, "error") %> prohibited this review from being saved:</h2>
<ul>
<% review.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field-group">
<%= form.label :Review_Title %>
<%= form.select(:title, options_for_select([ ['Excellent Experience','Excellent Experience'], ['Great Experience','Great Experience'], ['Average Experience','Average Experience'], ['Poor Experience','Poor Experience'], ['Terrible Experience','Terrible Experience']])) %>
</div>
<div class="field-group">
<%= form.label :rating %>
<%= form.number_field :rating, min: 1, max:5, class: "form-control" %>
</div>
<div class="field-group">
<%= form.label :"Description"%>
<%= form.text_area :description, class: "form-control" %>
</div>
<div class="field-group">
<%= form.label :reviewer %>
<%= form.text_field :reviewer, class: "form-control", value:current_user.name, :disabled => true %>
</div>
<br>
<div class="field-group">
<%= form.label :"User Reviewing" %>
<%= form.select :user_reviewed, User. where("email <> ?", current_user.email).pluck(:email, :name), :prompt => "Select one", class: "form-control" %>
</div>

<br>
<div class="actions-group">
<%= form.submit "Submit", class: "btn btn-primary"%>
</div>
<% end %>

审查控制器的创建文件

def create
@review = current_user.reviews.new(review_params)
respond_to do |format|
if @review.save
format.html { redirect_to @review, notice: 'Review was successfully created.' }
format.json { render :show, status: :created, location: @review }
else
format.html { render :new }
format.json { render json: @review.errors, status: :unprocessable_entity }
end
end

结束

这段代码将文件的所有权授予current_user,我正试图获得另一个用户的信息。我想要的用户的电子邮件在表单中传递并保存在user_reviewed中。有没有办法在review.new(review_params(之前替换current_user代码?

# Table name: reviews
#
#  id            :bigint           not null, primary key
#  description   :text
#  rating        :integer
#  reviewer      :string
#  title         :string
#  user_reviewed :string
#  created_at    :datetime         not null
#  updated_at    :datetime         not null
#  user_id       :bigint
#
# Indexes
#
#  index_reviews_on_user_id  (user_id)
#
# Foreign Keys
#
#  fk_rails_...  (user_id => users.id)

有没有办法在reviews.new(review_params)之前替换current_user代码

这不是正确的看待方式。

你的评论似乎有两件事,它们被命名为:

  1. 撰写评论的人。(reviewer是他们的名字(
  2. 评论的"所有者"。(user_reviewed是他们的电子邮件,user_id是他们的ID。(

这太令人困惑了。(我真的不清楚被审查的实际上是什么??!!评论有titledescription,但它应该链接到什么吗??(这应该是关于一个用户审查另一个用户吗?我不明白。

在我看来,实际上应该在这个表中保留两个ID,而不是用户的电子邮件地址/名称。因此,它可以被命名为:

  • author_id——撰写评论的用户
  • owner_id——拥有评论的用户

在视图中,而不是这样做:

<%= form.select :user_reviewed, User.where("email <> ?", current_user.email).pluck(:email, :name), :prompt => "Select one", class: "form-control" %>

你可以这样做:

<%= form.select :owner_id, User.where("id <> ?", current_user.id).pluck(:id, :name), :prompt => "Select one", class: "form-control" %>

然后在User模型中,您可以清楚地区分:

user.reviews_written # joins on the author_id
user.reviews_owned # joins on the owner_id

在控制器中,您应该使用current_user来实现它的实际含义:

@review = current_user.reviews_written.new(review_params)

最新更新