ruby-on-rails - 评论正在保存到数据库,但未正确显示
问题描述
我有一个 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
解决方案
你有几个错误:
块内的变量是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 %>
推荐阅读
- c# - Monogame C#:如何创建一个固定的图像网格,使其均匀地适合每个单元格?
- unity3d - 无法在 HoloLens 上部署
- angular - 从服务类进行嵌套 HTTP 调用并返回 Observable
- unit-testing - Nsubstitute 不能用 in 参数模拟带有签名的接口
- reactjs - 如何根据使用 React 的路由更改单独标题组件上的页面标题?
- jquery - inIframe 函数说明
- javascript - JavaScript TypeError:无法读取未定义的属性“id”
- javascript - 将所选语言保存在本地存储中?
- python - 多单元格的值错误问题尺寸必须相等,但为 20 和 13
- node.js - Nodejs:为什么我的 Promise 在 PUT 请求中不起作用?重新爱过