Доступ к массиву параметров внутри значения params [] - PullRequest
1 голос
/ 16 октября 2011

У меня есть следующие параметры:

Parameters: {"utf8"=>"✓", 
  "authenticity_token"=>"06Us9R1wCPCJsD06TN7KIV/2ZeH4dJlZVqc12gpKBbo=",
  "run"=>{"box_id"=>"1"}, "tapes"=>{"1"=>{"tape_id"=>"1"},
  "2"=>{"tape_id"=>"2"}, "3"=>{"tape_id"=>"3"}}, "commit"=>"Create Run"}}

Я хочу создать новый «прогон» с идентификатором блока 1, а затем связать ленты 1, 2 и 3 с этим прогоном с идентификатором блока 1

Я не уверен, какой код должен войти в контроллер, я попробовал:

def create
  @run = Run.new(params[:run])
  @tape_ids = @run.build_tape(params[:run][:tapes])

  @run.save

Когда я отправляю форму ниже, она создает новый прогон с правильным полем, но не связывает с ним ленты.

<%= form_for(@run) do |f| %>
  <% if @run.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@run.errors.count, "error") %> prohibited this tape
        from being saved:
      </h2>

      <ul>
        <% @run.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :box_id %>
    <br/>
    <%= f.text_field :box_id %>
  </div>

  <% (1..3).each do |index| %>
    <%= fields_for :tapes do |ff| %>

      <div class="field">
        <%= ff.label :tape_id , :index => index%>
        <%= ff.text_field :tape_id, :index => index %>
      </div>

    <% end %>
  <% end %>


  <div class="actions">
    <%= f.submit %>
  </div>
<% end %> 

1 Ответ

0 голосов
/ 24 ноября 2011

Если вы не делаете accepts_nested_attributes_for, то, возможно, это сработает.Я не знаю, что должен делать build_tape, но следующее даст вам массив с tape_ids для работы:

@tape_ids = params[:run][:tapes].map { |k, v| v["tape_id"].to_i }

Чтобы завершить ассоциацию, вы можете сделать что-то вроде

params[:run][:tapes].each do |k, v|
  t = Tape.find(v["tape_id"].to_i)
  t.run = @run
  t.save
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...