Rails: передача нового дочернего объекта-заполнителя (build) в родительское представление - PullRequest
1 голос
/ 30 декабря 2010

У меня есть 2 класса объектов ... Magician has_many Rabbits и Rabbit belongs_to Magician.

При просмотре волшебника (show.html) я хотел бы перечислить всех связанных кроликов, а затем добавить несколько пустых полей с кнопкой отправки, чтобы добавить нового кролика. Для этого я строю нового кролика (связанного с текущим магом) в методе Мага show (ниже).

Edit2: нашел способ заставить его работать, но не уверен, что это "Rails way"?

см. Встроенные комментарии (ниже): Если я строю кролика по методу show Мага, то при визуализации show пустой (и недействительный) кролик заканчивает список до того, как отображаются новые поля формы кролика.

Если я построю это в самом представлении, тогда все будет работать и рендерится правильно. Меня заставили поверить, что мы должны не делать подобные вещи в представлении ... если так, как правильно решить эту проблему?

#/app/controllers/magicians_controller.rb
class MagiciansController < ApplicationController
  respond_to :html, :json

  def show
    @magician = Magician.find(params[:id])
    @rabbit = @magician.rabbits.build  # <=== build here and empty rabbit gets 
       # included in @magician.rabbits when they're rendered...
       # but is NOT included in @magician.rabbits.count for some reason?!?!?
    respond_with(@magician)
  end
...
end

#view/magicians/show.html.haml
%p
  %b Name:
  = @magician.name

%h2 Rabbits
= "There are #{pluralize(@magician.rabbits.count, "rabbit")}"
= render @magician.rabbits, :target => @magician

%h2 Add a rabbit:
- @rabbit = @clown.rabbits.build -# <=== build here and everything SEEMS to work
= render :partial =>"rabbits/form", :locals => { :parent => @magician, :foreign_key => :magician_id, :flash => flash } 

Edit1: Добавление сгенерированного html из частичного согласно запросу:

  <p>
    <b>Rabbit:</b>

    <b>Color:</b>

    |
    <b>ID:</b>

    <a href="/magicians/2/rabbits" data-confirm="Sure? A bunny will die" data-method="delete" rel="nofollow">Kill Rabbit</a>
  </p>

И я полагаю, вы, вероятно, хотите увидеть частичное, которое генерирует это:

%p
  %b Rabbit:
  = rabbit.name

  %b Color: 
  = rabbit.color
  |
  %b ID:
  = rabbit.id
  = link_to("Kill Rabbit", [target, rabbit], :method => :delete, :confirm => "Sure? A bunny will die")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...