Rails:has_many:通过_ids嵌套?

发布于 2024-11-05 10:52:05 字数 797 浏览 2 评论 0原文

在单个页面上,我可能有一个视频,然后通过复选框向其中添加多只狗。足够简单(如下所示)...

视图:

<%= check_box_tag "video[dog_ids][]", dog.id %>

控制器:

params[:video][:dog_ids] ||= []  

但我不知道如何做是拥有多个视频,每个视频都有多只狗。

我目前有这个:

<% @videos.each do |video| %>
  <%= fields_for "item[]", video do |f| %>
    <%= f.hidden_field :id, :index => nil %>
    <%= f.text_field :title, :index => nil%>
    <%= f.text_area :body, :index => nil %>

    <% video.dogs.each do |dog| %>
      <%= check_box_tag "item[][video[dog_ids][]]", dog.id %>
    <% end %>
  <% end %>
<% end %>

但是当我这样做时,提交时 dogs_ids 总是 nil

知道我做错了什么吗?

On a single page I might have a single Video and then checkboxes to add multiple dogs to it. Easy enough (as follows)...

View:

<%= check_box_tag "video[dog_ids][]", dog.id %>

Controller:

params[:video][:dog_ids] ||= []  

But what I can't figure out how to do is have multiple videos, each with multiple dogs.

I currently have this:

<% @videos.each do |video| %>
  <%= fields_for "item[]", video do |f| %>
    <%= f.hidden_field :id, :index => nil %>
    <%= f.text_field :title, :index => nil%>
    <%= f.text_area :body, :index => nil %>

    <% video.dogs.each do |dog| %>
      <%= check_box_tag "item[][video[dog_ids][]]", dog.id %>
    <% end %>
  <% end %>
<% end %>

But when I do that, dogs_ids is always nil when it's submitted.

Any idea what I'm doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

呢古 2024-11-12 10:52:05

这样的设置包含 fields_for "item[]"f.text_field :title, :index => nil 产生:

<input id="item__name" name="item[][title]" size="30" type="text" value="vid1">

这表明复选框名称应为 item[][dog_ids][]
一个工作示例:

<% @videos.each do |video| %>
  <%= fields_for "item[]", video do |f| %>
    <%= f.text_field :title, :index => nil %>
    <% video.dogs.each do |dog| %>
      <%= check_box_tag "item[][dog_ids][]", dog.id %> <%= Dog.name %>
    <% end %>
    <br>
  <% end %>
<% end %>

这会在参数中产生结果:

{"item"=> [
  {"title"=>"vid1", "dog_ids"=>["1", "2"]},
  {"title"=>"vid2", "dog_ids"=>["2"]},
  {"title"=>"vid3", "dog_ids"=>["2", "3"]}
]}

Such a setup with fields_for "item[]" and f.text_field :title, :index => nil produces:

<input id="item__name" name="item[][title]" size="30" type="text" value="vid1">

This indicates that the checkbox name should be item[][dog_ids][].
A working example:

<% @videos.each do |video| %>
  <%= fields_for "item[]", video do |f| %>
    <%= f.text_field :title, :index => nil %>
    <% video.dogs.each do |dog| %>
      <%= check_box_tag "item[][dog_ids][]", dog.id %> <%= Dog.name %>
    <% end %>
    <br>
  <% end %>
<% end %>

This produces result in params:

{"item"=> [
  {"title"=>"vid1", "dog_ids"=>["1", "2"]},
  {"title"=>"vid2", "dog_ids"=>["2"]},
  {"title"=>"vid3", "dog_ids"=>["2", "3"]}
]}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文