【问题标题】:How to give ownership of created review to another user during creation如何在创建期间将已创建评论的所有权授予其他用户
【发布时间】:2020-04-23 10:33:20
【问题描述】:

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

_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 中。有没有办法在 reviews.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】:

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

    这不是正确的看法。

    你的评论好像有两点,分别是:

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

    这非常令人困惑。 (而且我真的不清楚正在审查的东西到底是什么???!!评论有一个title 和一个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)
    

    【讨论】:

    • 这是一个拍卖网站,人们正在评论其他人,就像他们在亚马逊或 ebay 上的表现一样。经过几天的努力,我确实同意它非常令人困惑,但它是一个小组项目,所以我不能轻易更改名称
    • 有没有办法获取用户?
    • “它是一个小组项目,所以我不能轻易更改名称” -- 抱歉,但这不是一个好的借口。我已经在多个公司/项目中工作了几年,有时与其他数十个开发人员一起工作。我一直在重命名。处理无法更改的代码是没有用的。如果名称不好,请重命名。
    • 如果审阅者介于两个用户之间,请合理命名。怎么样:reviewer_idreviewed_user_id?同样,无需在两个表中复制 nameemail 之类的数据——您应该能够像这样访问它:review.reviewer.namereview.reviewed_user.email
    • “有没有办法获取用户?” -- 我不确定我是否理解这个问题。 User.find_by!(email: ....)?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多