У меня есть две модели
class Subscription < ActiveRecord::Base
belongs_to :client
end
class Client < ActiveRecord::Base
has_one :subscription
end
но когда я пытаюсь создать родителя от ребенка, например, sub.build_client, внешний ключ не становится установленным, например.
>> sub = Subscription.new
=> #<Subscription id: nil, token: nil, user_id: nil, created_at: nil, updated_at: nil, cancelled: nil, active: nil, client_id: nil>
>> sub.save(false);
?> client = sub.build_client
=> #<Client id: nil, server_id: nil, ip: nil, created_at: nil, updated_at: nil>
>> client.save(false)
=> true
>> sub.client_id
=> nil
>> sub
=> #<Subscription id: 4, token: nil, user_id: nil, created_at: "2010-01-11 06:07:45", updated_at: "2010-01-11 06:07:45", cancelled: nil, active: nil, client_id: nil>
Это действительно работает, если я делаю клиента build_subscription
?> client = Client.new
=> #<Client id: nil, server_id: nil, ip: nil, created_at: nil, updated_at: nil>
>> client.save(false)
=> true
>> sub = client.build_subscription
=> #<Subscription id: nil, token: nil, user_id: nil, created_at: nil, updated_at: nil, cancelled: nil, active: nil, client_id: 4>
>> sub.save(false)
=> true
>> sub
=> #<Subscription id: 5, token: nil, user_id: nil, created_at: "2010-01-11 06:09:32", updated_at: "2010-01-11 06:09:32", cancelled: nil, active: nil, client_id: 4>
>> client
=> #<Client id: 4, server_id: nil, ip: nil, created_at: "2010-01-11 06:09:02", updated_at: "2010-01-11 06:09:02">
>> ^C
Я провел 3 часа, играя и стал нигде не быстрым. Может любой объяснять, что я делаю неправильно, вещи проверить и т.д.
В соответствии с вашими модельными ассоциациями Подписка
является дочерним предприятием клиента
.
Если вы сначала создаете подписку, а затем клиента в соответствии с вашим первым примером, у Rails нет возможности установить значение иностранного ключа client_id
в таблице subscriptions
, потому что в этот момент вы не создали клиентскую запись, так что нет ничего, что могло бы ассоциироваться с подпиской. Поэтому вы должны сначала создать родительскую запись (т.е. клиент), а затем связать её с дочерней записью подписки, используя метод build_subscription
.
Это не работает как способами, родитель может построить ребенка с методом Build_Association, но не наоборот.
Читайте: http://apidock.com/rails/activerecord/sascations/Classmethods/has_one
Краткая версия: line-height: 150%
статическая, line-height: 1,5
динамическая. Эффект более очевиден для наследующих элементов. Пример:
HTML
<div style="font-size: 12px">
<span style="font-size: 24px">test</span>
</div>
Этот CSS
div { line-height: 150%; } /* Computed line-height: 18px (150% * 12px) */
span { } /* Computed line-height: 18px (inherited directly) */
В противоположность этому:
div { line-height: 1.5 } /* Computed line-height: 18px (1.5 * 12px) */
span { } /* Computed line-height: 36px (1.5 * 24px) */
Вы можете прочитать больше на странице CSS2 спецификации
-121--2439260-Блог об этом в моем блоге :) Короткая версия, чтобы найти полные названия ресурсов (если вы уже не знаете их):
var assembly = Assembly.GetExecutingAssembly();
foreach (var resourceName in assembly.GetManifestResourceNames())
System.Console.WriteLine(resourceName);
Чтобы использовать все их для чего-либо:
foreach (var resourceName in assembly.GetManifestResourceNames())
{
using(var stream = assembly.GetManifestResourceStream(resourceName))
{
// Do something with stream
}
}
Чтобы использовать ресурсы в других сборках, кроме выполняющейся, можно просто получить другой объект сборки, используя некоторые другие статические методы класса Assembly
. Надеюсь, это поможет:)
В моих проектах есть много похожих связей, но я часто запрещаю устанавливать для client_id значение null, поэтому не могу создать дочерний объект без родительского объекта.
Попробуйте
sub = Subscription.new
sub.build_client
sub.save
Создать и сохранить оба объекта.