首页 > 解决方案 > 评论正在保存到数据库,但未正确显示

问题描述

我有一个 Review 模型,它既属于 User 又属于 Profile。通过评论控制器中的创建操作,评论被创建并保存到数据库中。

class ReviewsController < ApplicationController
  before_action :set_profile
  before_action :set_review, only: :new

  def new
    @review = Review.new
  end

def create
    @profile = Profile.find(params[:profile_id])
    @review = @profile.reviews.build(review_params)
    @review.user_id = current_user.id

    if @review.save
        redirect_to user_profile_path(current_user, @profile)
    else
        redirect_to user_profile_path(current_user, @profile), notice: "Didn't save your review"
    end
end

  private

  def review_params
    params.fetch(:review, {}).permit(:rating, :content)
  end

def set_profile
    @profile = Profile.find(params[:profile_id])
  end

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

end

如果我检查控制台,Review.last 它实际上显示了带有所有关联的最后一个评论。

#<Review id: 10, rating: 5, content: "Test review", user_id: 3, profile_id: 1, created_at: "2019-11-23 23:50:57", updated_at: "2019-11-23 23:50:57">

所以问题出在我的 Profile#show.erb.html 中,我猜。现在,评论位看起来像这样:

<% @reviews.each do |review| %>
    <%= @review.content %> wrote <small> <%= time_ago_in_words(review.created_at) %> ago </small>
    <p>
        <%= @review.content %>
    </p>
<% end %>

我打印的是:

wrote less than a minute ago

...没有任何内容。

所以,我再次猜测,它无法访问参数?那么可能是这条线吗?

params.fetch(:review, {}).permit(:rating, :content)

但之前,正如我在下面的代码中所拥有的那样,它甚至没有保存到数据库中。

params.permit(:rating, :content)

此外,无法访问存储在用户中的信息。理想情况下应该是这样的

<% @reviews.each do |review| %>
    <%= @review.user.first_name.last_name %> wrote <small> <%= time_ago_in_words(review.created_at) %> ago </small>
    <p>
        <%= @review.content %>
    </p>
<% end %>

但是当我这样做时,我得到一个错误

undefined method `first_name'

我知道

@review.user.first_name.last_name

可能不是显示用户名字和姓氏的正确方法。理想情况下应该是

John Smith wrote 42 minutes ago : This is a test review

标签: ruby-on-rails

解决方案


你有几个错误:

块内的变量是review,不是@review

<% @reviews.each do |review| %>
    <%= review ... %> wrote <small>
<% end %>

此外,first_name.last_name除非您last_name在 String 类上定义,否则会抛出 NoMethodError 。

请尝试:

<%= review.user.first_name %> <%= review.user.last_name %>

推荐阅读