考虑这个设置。在我的Blogs#index
页面中,我可以更新每个博客记录。这是它的样子:
以下是代码:
<h1>Listing Blogs</h1>
<div class="row">
<div class="col-sm-4"><b>ID</b></div>
<div class="col-sm-4"><b>Title</b></div>
<div class="col-sm-4"><b>Actions</b></div>
</div>
<% @blogs.each do |blog| %>
<%= form_for(blog) do |f| %>
<div class="row">
<div class="col-sm-4">
<%= blog.id %>
</div>
<div class="col-sm-4">
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div class="col-sm-4">
<%= f.submit class: "btn btn-success" %>
</div>
</div>
<% end %>
<br>
<% end %>
<%= link_to 'New Blog', new_blog_path %>
还不错。但是现在我要做的是添加一个包装这些表单的表单。此表单允许您选择所需的博客对象,然后发布到某个控制器,抓取您选择的每个博客记录的id
:
以上只是一个模拟。我不知道如何实际做到这一点,这就是问题所在。
这个想法是用户可以提交两种形式:
ids
的{{1}} blogs
操作。 由于我无法在其他表单中嵌套表单,我能想到的唯一方法是使用javascript:
Blogs#update
按钮后,使用javascript查看每个已选中复选框的关联Do something with selected blogs
的内容,将其添加到数组中,然后同时调用blog id
请求get
作为参数。我非常希望不使用javascript。有没有什么方法可以保持相同的布局而不使用javascript,这将允许我发布到包装的表单,但也发布任何个人表单在那个包裹的形式里面?
答案 0 :(得分:0)
也许最简单的答案是为每个项目提供重复的字段(取决于您需要的内容)并将副本设置为隐藏。然后,您需要编写的javascript是在您关注的任何字段发生更改时将数据从非隐藏表单复制到隐藏表单中。通过这种方式,您可以将第二个表单放在上面的表单下面,它就像它的按钮一样,就像在您的模型中一样。
答案 1 :(得分:0)
尚未经过测试:
#routes
post "update_all" => "blogs#update_all"
和
#view
<%= form_tag "/update_all", method: "post" do %>
<% @blogs.each do |blog| %>
<%= form_for @blog do |f| %>
<div class="row">
<div class="col-sm-3">
<%= select_tag "blog_ids[]", blog.id %>
</div>
<div class="col-sm-3">
<%= blog.id %>
</div>
<div class="col-sm-3">
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div class="col-sm-3">
<%= f.submit "Update Blog", class: "btn btn-success" %>
</div>
</div>
<% end %>
<% end %>
<%= submit_tag "Do something with selected blogs", class: "btn btn-primary" %>
和
#controller
def update
#your standard update
end
def update_all
#handle update all
end
我会检查服务器日志以查看整体传递的内容,并编写一个自定义强参数函数来筛选它。
答案 2 :(得分:0)
我得到了它的工作。对我来说,关键是不要嵌套表格。相反:我只是将两个类型的表单并排放置。我是通过使用bootstrap的网格系统完成的。
这是代码。请注意,它确实使用引导程序进行样式设置:
<h1>Listing Blogs</h1>
<div class="row">
<div class="col-sm-3">
<p>Select</p>
<%= form_tag do_something_blogs_path do %>
<% @blogs.each do |blog| %>
<div>
<%= check_box_tag "blog_ids[]", blog.id, false %>
</div><br>
<% end %>
<%= submit_tag "Do Something with Selection" %>
<% end %>
</div>
<div class="col-sm-9">
<div class="row">
<div class="col-sm-4"><p>ID</p></div>
<div class="col-sm-4"><p>Title</p></div>
<div class="col-sm-4"><p>Actions</p></div>
</div>
<div class="row">
<% @blogs.each do |blog| %>
<%= form_for(blog) do |f| %>
<div class="col-sm-4">
<%= blog.id %>
</div>
<div class="col-sm-4">
<%= f.label :title %>
<%= f.text_field :title %>
</div>
<div class="col-sm-4">
<%= f.submit class: "btn btn-success" %>
</div>
<% end %>
<br><br>
<% end %>
</div>
</div>
</div>
<%= link_to 'New Blog', new_blog_path %>