You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关联用户提交的电影评论至对应详情页?是否需用params与redirect_to?

实现评论与电影详情页的关联及实时展示

你的思路方向完全正确!要把用户提交的评论关联到对应电影详情页并实时展示,确实需要结合params哈希获取关联信息,再通过redirect_to回到电影页面。下面是具体的实现步骤,帮你把整个流程串起来:

1. 配置嵌套路由确保关联关系

首先在config/routes.rb里设置嵌套路由,让评论和所属电影绑定:

resources :movies do
  resources :reviews, only: [:create] # 仅保留处理评论提交的create动作
end

2. 完善ReviewsController的create动作

在app/controllers/reviews_controller.rb中,我们需要从params里拿到电影ID,创建与该电影关联的评论,成功后跳转回电影详情页:

def create
  # 通过params[:movie_id]定位到当前电影
  @movie = Movie.find(params[:movie_id])
  # 构建关联到该电影的评论,传入用户提交的内容
  @review = @movie.reviews.build(review_params)
  
  # 如果你的应用有用户系统(比如Devise),可以关联评论者
  # @review.user = current_user

  if @review.save
    # 跳转回电影详情页并显示成功提示
    redirect_to movie_path(@movie), notice: '评论提交成功!'
  else
    # 保存失败时跳转回详情页,显示错误提示
    redirect_to movie_path(@movie), alert: '评论提交失败,请检查内容后重试。'
  end
end

private
# 强参数过滤,仅允许提交content字段
def review_params
  params.require(:review).permit(:content)
end

3. 在电影详情页添加评论表单与展示区

在app/views/movies/show.html.erb里,添加提交评论的表单,同时展示已有评论:

<!-- 评论提交表单 -->
<h3>写下你的评论</h3>
<%= form_with(model: [@movie, @movie.reviews.build], local: true) do |form| %>
  <div class="form-group">
    <%= form.label :content, '评论内容' %>
    <%= form.text_area :content, rows: 3, class: 'form-control' %>
  </div>
  <%= form.submit '提交评论', class: 'btn btn-primary' %>
<% end %>

<!-- 已有评论展示区 -->
<h3>用户评论</h3>
<% if @movie.reviews.empty? %>
  <p>还没有评论,快来写下第一条吧!</p>
<% else %>
  <% @movie.reviews.each do |review| %>
    <div class="card mb-2">
      <div class="card-body">
        <p class="card-text"><%= review.content %></p>
        <!-- 如果关联了用户,可以显示评论者信息 -->
        <!-- <p class="card-text text-muted">评论者:<%= review.user.name %></p> -->
      </div>
    </div>
  <% end %>
<% end %>

关键逻辑说明

  • params的作用:params[:movie_id]帮我们定位到用户当前访问的电影,params[:review][:content](通过review_params过滤后)就是用户提交的评论内容,两者结合就能创建和电影绑定的评论。
  • redirect_to的作用:评论保存成功后,跳回对应的电影详情页movie_path(@movie),页面重新加载后,新创建的评论就会实时显示在页面上。

这样一套流程下来,用户在电影详情页提交的评论就会正确关联到该电影,并且提交后立刻在页面上看到自己的评论啦。

内容的提问来源于stack exchange,提问作者Joseph H.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:00:40