Как собрать родителей только один раз в Rails - PullRequest
1 голос
/ 06 декабря 2010

Как я могу гарантировать, что родительский элемент строит своих дочерних элементов только n раз в Rails?

Есть ли способ найти непостоянные экземпляры?

В настоящее время у меня возникает проблема, когдаЯ создаю детей при первой загрузке страницы.Когда пользователь обновляет страницу, дочерние элементы не загружаются, поскольку они уже созданы, но не были сохранены.

Есть идеи о том, как решить эту проблему?

В представлении:

if ( session[:members_built] == false )
    @membership.build_members
    session[:members_built] = true
end

...

  <% f.fields_for :members do |ff| %>
<%= render :partial => "member", :locals => { :ff => ff } %>

В модели:

  def build_members
    (membership_type.adults - 1).times {members.build}
  end

1 Ответ

1 голос
/ 06 декабря 2010
if ( session[:members_built] == false )
  @membership.build_members
  session[:members_built] = true
end

Я бы порекомендовал не иметь код, как это ваши взгляды.Это идет вразрез с принципами MVC.Так что переместите его в контроллер.Также ознакомьтесь с направляющими для рельсов для ассоциаций .

Так что вы можете сделать что-то вроде

@membership.build_members

в вашем контроллере.Вам не нужно использовать переменную сеанса, чтобы запомнить, вызвали ли вы #build_members, потому что использование #build не сохраняет объект.Поэтому, когда пользователь обновляет страницу, контроллер снова вызовет #build_members, и ваш взгляд должен соответствовать вашим ожиданиям.

...