ruby-on-rails - ruby on rails 嵌套表单创建
问题描述
我的用户模型有很多评论,每条评论都有很多回复。
我想允许用户在评论下回复。
在个人资料页面(来自个人资料控制器并显示操作)中,我希望能够创建回复。
<div class="reply-box d-none" id="reply-box">
<%= form_with(model: Reply, url: new_user_review_reply_path(@user, @review)) do |reply| %>
<%= reply.hidden_field :user_id, value: @user %>
<%= reply.hidden_field :review_id, value: @review %>
<%= reply.text_field :reply_content%>
<div class="comment-box-btns mb-5">
<%= reply.submit "submit", class: 'submit-btn d-inline-block ml-2 float-right'%>
<div class="cancel-btn d-inline-block float-right">cancel</div>
</div>
<% end %>
</div>
这是 route.rb
resources :users do
resources :reviews do
resources :replies
end
end
这是回复控制器:
class RepliesController < ApplicationController
def new
@user = User.find(params[:user_id])
@reivew = @user.reviews.find(params[:review_id])
@reply = @reivew.replies.new
end
def create
@user = User.find(params[:user_id])
@reivew = @user.reviews.find(params[:review_id])
@reply = @reivew.replies.create!(reply_params)
respond_to do |format|
format.html {redirect_to(profile_path(param[:user_id]))}
format.js
end
end
private
def reply_params
params.require(:reply).permit(
:reply_content,
:user_id,
:review_id
)
end
end
我不知道如何设置“form_with”。到目前为止,它只是说
undefined method `reply_content' for #<Class:0x007f8c7396aaa8>
reply_content 是我想使用 text_area 创建的回复字段。
我很困扰。任何帮助将不胜感激。
解决方案
由于您已经@reply = @reivew.replies.new
在新操作中进行了初始化,因此您应该将此@reply
对象与回复表单一起使用,而且我认为您不需要明确提供value: user_id
和value: review_id
<div class="reply-box d-none" id="reply-box">
<%= form_for @reply, url: new_user_review_reply_path(@user, @review) do |reply| %>
<%= reply.hidden_field :user_id %>
<%= reply.hidden_field :review_id %>
<%= reply.text_field :reply_content%>
<div class="comment-box-btns mb-5">
<%= reply.submit "submit", class: 'submit-btn d-inline-block ml-2 float-right'%>
<div class="cancel-btn d-inline-block float-right">cancel</div>
</div>
<% end %>
</div>
推荐阅读
- java - 对于以下从时间戳中删除纳秒和秒分量的快速方法,是否存在任何可能的失败边缘情况?
- excel - 如何在动态填充数据的三个分级分组行上使用条件格式数据栏
- sql - 如何从 Pandas 表中的先前加载中选择大于存储在文件中的最大时间戳的记录
- javascript - 将不同语言的“人类”日期字符串转换为 JavaScript 中的日期对象
- ios - 断开 Lightning 耳机后,来自 AVCaptureMultiCamSession 的非常安静的音频样本
- python - 批量调用昂贵的函数
- javascript - 在不构建 Trello Clone 的情况下学习 React Beautiful DnD 基础知识
- sql - 删除数百万行而不影响事务日志
- c# - 传递空回调 Blazor
- python - python folium HeatMapWithTime 插件只显示底图