Получение fields_for и accepts_nested_attributes_for для работы с belongs_to отношениями

Нет, необходимо циклично выполниться по станд.:: отобразите и проверьте все значения вручную. В зависимости от того, что Вы хотите сделать, Вы могли перенести станд.:: карта в простом классе, что также кэши все значения, которые вставляются в карту в чем-то, это легко доступно для поиска и не позволяет дубликаты, как станд.:: набор. Не наследуйтесь станд.:: карта (это не имеет виртуального деструктора!), но переносят его так, чтобы можно было сделать что-то вроде этого:

WrappedMap my_map< std::string, double >;
my_map[ "key" ] = 99.0;
std::set< double > values = my_map.values(); // should give back a set with only 99.0 in it

альтернатива прокрутке Вашего собственного должна была бы использовать Повышение двунаправленная карта, которая легко найдена в сообщениях ниже или Google.

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

28
задан Billy Gray 21 August 2009 в 17:08
поделиться

4 ответа

I think your accepts_nested_attributes is on the wrong side of the relationship. Maybe something like this would work?

class Account < ActiveRecord::Base
  belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id'
  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :account
  has_one :account, :foreign_key => :owner_id
  accepts_nested_attributes_for :account
end

For building the account you want to use build_account.

You can see more examples in the docs.

8
ответ дан 28 November 2019 в 03:03
поделиться

Я использую Rails 2.3.5, и я заметил то же самое. Проверка источника для Active_Record Nested_Attributes.rb, похоже, принадлежит относится к тому, что он должен работать нормально. Таким образом, кажется, что это может быть ошибка «вложенных форм».

У меня есть вложенная форма, такая же, как ваша, с пользователем принадлежит: адрес , а адрес не зависит от пользователя.

Тогда в форме, я просто делаю <% f.fyfields_for: address_attributes do | address_form | %> вместо <% f.Fields_for: адрес do | address_form | %> . Временное взломать, пока не будет лучше, но это работает. Метод Actions_nesteest_attributes_for ожидает, что параметры включают что-то вроде:

{user => {Address_attributes => {attr1 => 'one', attr2 => 'два'}, name => 'myname '}

... Но Pielks_for производит:

{user => {адрес => {attr1 =>' one ', attr2 =>' два '}, name =>' MyName '}

Таким образом, вам не нужно добавлять, что HAS_ONE: учетная запись в ваш код, который не работает в моем случае.

Обновление: Найдено лучший ответ:

Вот суть кода, который я использую, чтобы сделать эту работу справа от работы:

Rails вложенные формы с принадлежателем, принадлежащим к гисту

, надеюсь, что поможет.

8
ответ дан 28 November 2019 в 03:03
поделиться

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

Ответ на самом деле довольно прост, вам нужно сделать следующее в вашем новом действии:

@account.build_owner

Причина, по которой форма не отображалась с использованием fields_for, заключалась в том, что у нее не было валидного объекта. У вас была правильная идея:

@account.owner.build

Однако, это не тот способ, которым работают belongs_to. Этот метод генерируется только с has_many и has_and_belongs_to_many.

Ссылка: http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference

44
ответ дан 28 November 2019 в 03:03
поделиться
class Account < ActiveRecord::Base

    belongs_to :owner  :class_name => 'User', :foreign_key => 'owner_id'
end

У меня это работает. : foreign_key => 'owner_id' был ключевой проблемой в моем случае.

-3
ответ дан 28 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: