ruby-on-rails - submit_tag 未发送到 Rails 中的正确控制器和操作
问题描述
我在我的应用程序上创建了一个表单,该表单应该删除我的应用程序上的一些媒体。
我有一个专辑实体,上面有一些媒体。我创建了一个名为 media_uploader 的部分,因此我可以在其他地方重用它。我从专辑/新视图中调用我的部分。像这样:
<%= render '/profiles/edit/sidebar', user: current_user %>
<article class="col-9 col-offset-1">
<h3 class="color-gray-medium">Album Info</h3>
<div class="row row-no-padding top-5">
<%= form_for @album do |f| %>
<div class="col-9">
<div class="form-group row" >
<div class="col-6">
<label for="">Name:</label>
<%= f.text_field :name %>
</div>
</div>
</div>
<div class="col-9">
<div class="form-group row" >
<div class="col-6">
<%= render 'shared/media_uploader', media_contents: @media_contents %>
</div>
</div>
</div>
shared/_media_uploader.html.erb
<%= link_to 'Delete', delete_media_path, method: :delete, id: 'delete-all', class: 'btn btn-danger', disabled: media_contents.empty? %>
<br><br>
<div class="row">
<div id="media-contents" class="col-12">
<% if media_contents.empty? %>
<h5 id="no-media">No Media Found</h5>
<% else %>
<% media_contents.each do |media| %>
<div class="col-4">
<div class="thumbnail">
<%= image_tag media.file_name_url(:thumb) %>
<div class="caption">
<p>
<%= check_box_tag 'media_contents[]', media.id %>
</p>
</div>
</div>
</div>
<% end %>
</div>
</div>
<% end %>
<% end %>
我的路线是这样的:
resources :media_contents, only: [:create]
delete 'delete_media', to: "media_contents#delete_media"
delete 'delete_all', to: 'media_contents#delete_all'
当我单击此处的删除按钮时:
<%= form_tag({controller: "media_contents", action: "delete_media"}, method: "delete") do %>
<%= submit_tag 'Delete', id: 'delete', class: 'btn btn-danger', disabled: media_contents.empty? %>
它给出了一个错误:
No route matches [DELETE] "/albums"
我知道这是由于外部 form_for: @album 造成的。
问题是:“我该怎么做?” 我怎样才能在这个@album 表单中调用另一个控制器的方法并使其工作?
解决方案
您不能在另一个表单中使用表单,它是无效的 html。但是您可以使用 2 个提交按钮并根据commit
参数决定在控制器操作中做什么。您需要form_tag
从部分中删除内部并更改更新操作,例如:
if params[:commit] == "Delete"
# deletion logic or redirect to needed delete action goes here
else
# existing `update` goes here
end
推荐阅读
- react-native - 更新反应变量时索引文件不更新
- javascript - 打字稿中的条件返回类型
- json - 您好,当我尝试将数据集加载到 BigQuery 中时收到此错误代码“位置 25 处 JSON 中的意外令牌 g”
- mysql - 如何在作为主键和候选键的表中引用多个外键?
- python - TypeError:字段“id”需要一个数字,但得到了
- solana - `程序日志:您不能单方面验证另一个创建者,他们必须签名` Metaplex 糖果机中的错误
- bash - 无法打开 bimFile.bed 错误,进行 GWAS
- ios - 如何通过案例从枚举 tableView 推送到新视图
- python-3.x - Selenium Python (3.141.0, Geckodriver 0.30.0) 无法打开 Firefox Webdriver:“您的 Firefox 配置文件无法加载它可能丢失或无法访问。”
- javascript - 使用 Express 和 Sendgrid 发送电子邮件