Нет, необходимо циклично выполниться по станд.:: отобразите и проверьте все значения вручную. В зависимости от того, что Вы хотите сделать, Вы могли перенести станд.:: карта в простом классе, что также кэши все значения, которые вставляются в карту в чем-то, это легко доступно для поиска и не позволяет дубликаты, как станд.:: набор. Не наследуйтесь станд.:: карта (это не имеет виртуального деструктора!), но переносят его так, чтобы можно было сделать что-то вроде этого:
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.
Это действительно зависит от того, что Вы хотите сделать, как часто Вы хотите сделать это, и как трудно это - к самокрутке мало класса обертки по сравнению с установкой и использованием Повышения. Я люблю Повышение, таким образом, это - хороший способ пойти - но существует что-то хорошее и полное о создании Вашего собственного класса обертки. Вы имеете преимущество понимания непосредственно сложности операций, и Вам, возможно, не понадобится полное обратное отображение значений => ключи, это обеспечивается Повышением двунаправленную карту.
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.
Я использую 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 вложенные формы с принадлежателем, принадлежащим к гисту
, надеюсь, что поможет.
Я опоздал на несколько месяцев, но я искал решение этой ошибки, и моя ситуация заключалась в том, что я не мог изменить отношения, чтобы они были "направлены в другую сторону".
Ответ на самом деле довольно прост, вам нужно сделать следующее в вашем новом действии:
@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
class Account < ActiveRecord::Base
belongs_to :owner :class_name => 'User', :foreign_key => 'owner_id'
end
У меня это работает. : foreign_key => 'owner_id' был ключевой проблемой в моем случае.