Rails form_for 具有相同属性的嵌套和关联资源已填充文本
Posted
技术标签:
【中文标题】Rails form_for 具有相同属性的嵌套和关联资源已填充文本【英文标题】:Rails form_for nested and associated resources with same attributes has text filled in 【发布时间】:2021-11-28 08:02:01 【问题描述】:我正在为两个关联模型播放列表和视频创建嵌套表单,它们也是嵌套资源,我正在尝试创建嵌套表单。每个播放列表有许多视频,每个视频属于一个播放列表。它们都具有标题和描述的属性。转到 new_playlist_video_path 会导致将播放列表的标题和描述放入视频的表单字段中。
** 更新 ** 当我访问 new_playlist_video_path(playlist) 时,视频表单呈现,但控制器认为我在 playlist#update 中并向播放列表路径发送补丁请求。
路线
resources :playlists do
resources :videos
end
我的控制器
before_action :set_playlist, only: %i[new edit update create]
# GET /videos/new
def new
@video = @playlist.videos.build
end
private
def set_playlist
@playlist = Playlist.find(params[:playlist_id])
end
视频#新
<%= form_for([@video, @playlist], url: playlist_videos_path, class: "contents") do |form| %>
<% if @video.errors.any? %>
<div id="error_explanation" class="bg-red-50 text-red-500 px-3 py-2 font-medium rounded-lg mt-3">
<h2><%= pluralize(@video.errors.count, "error") %> prohibited this video from being saved:</h2>
<ul>
<% @video.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="my-5">
<%= form.label :title %>
<%= form.text_field :title, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
</div>
<div class="my-5">
<%= form.label :description %>
<%= form.text_area :description, text: nil , rows: 4, class: "block shadow rounded-md border border-gray-200 outline-none px-3 py-2 mt-2 w-full" %>
</div>
<div class="inline">
<%= form.submit class: "rounded-lg py-3 px-5 bg-blue-600 text-white inline-block font-medium" %>
</div>
<% end %>
我可以更改视频的属性,但这似乎工作量太大,因为我必须重新编写验证、测试和大量 html。如何让我的视频表单不显示其所属模型的标题和描述?
【问题讨论】:
我真的不明白你在这里做什么,听起来你真正想要的是视频和播放列表之间的多对多关联,并且只是关联视频和播放列表而不是创建新的视频实例。您能否尝试从高级用户 POV 而非细节来描述您正在做的事情? 创建与播放列表关联的视频。播放列表有很多视频视频属于播放列表。一切都准备好了,谢谢!! 【参考方案1】:我的表格错了,应该是的
<%= form_for([@playlist, @video, ], class: "contents") do |form| %>
~~~ form contents
【讨论】:
除非这是一个遗留应用程序(Rails 5.1 之前),否则您应该使用form_with(model: [@playlist, @video], class: "contents")
。 form_for
是一种遗留方法,预计会被贬低和删除。
不知道谢谢!以上是关于Rails form_for 具有相同属性的嵌套和关联资源已填充文本的主要内容,如果未能解决你的问题,请参考以下文章