如何在创建评论时将创建的评论的所有权交给另一个用户?

问题描述 投票:0回答:1

我正在尝试建立一个用户评论网站。 我需要将创建的评论的所有权交给另一个用户。 以下是我的代码

_form,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)
html ruby-on-rails ruby
1个回答
0
投票

有什么办法可以取代 current_user 前置代码 reviews.new(review_params)

这样看不对。

你的评论好像有两件事,是点名的。

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

这是超级混乱的。(而且我真的不清楚什么是 被检 其实是吗?!!! 评论有 title 和a description但它应该是链接到什么东西吗?) 这应该是关于一个用户评论另一个用户吗?我不明白。

在我看来,你实际上应该在这个表中持久化两个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)
© www.soinside.com 2019 - 2024. All rights reserved.