Конфликт классов подписки на драгоценные камни Rails Braintree - PullRequest
1 голос
/ 05 мая 2011

В моем приложении Rails я использую драгоценный камень Braintree для создания подписок. Не осознавая этого, я также создал модель подписки и контроллер для управления информацией о подписке, которую я хотел хранить локально. В моей модели подписка может принадлежать пользователю. Тем не менее, некоторые из обычных вещей, которые вы можете сделать, не работали, такие как current_user.subscriptions.build ()

Но по какой-то причине, когда кто-то помогал мне, они могли использовать

current_user.create_subscription

Где определен этот метод create_subscription? Это как-то отменяет соглашение Rails?

Я заметил, что в геме Брейнтри есть файл subscription.rb. Есть ли какой-то конфликт с классом, определенным Braintree и моей моделью подписки? Я знаю, что могу, вероятно, просто переименовать свою модель подписки, но мне любопытно, в чем заключается конфликт.

1 Ответ

1 голос
/ 05 мая 2011

Ваша проблема в том, что отношение подписки имеет has_one или own_to, а не has_many.В этом случае у пользователя не будет метода подписки, так как присоединенная подписка будет единственной.Просмотрите документацию по API, чтобы узнать, как управлять этими видами отношений в AR.

Из руководства по has_one:

The following methods for retrieval and query of a single associated object will be added:

association(force_reload = false)

Returns the associated object. nil is returned if none is found.

association=(associate)

Assigns the associate object, extracts the primary key, sets it as the foreign key, and saves the associate object.

build_association(attributes = {})

Returns a new object of the associated type that has been instantiated with attributes and linked to this object through a foreign key, but has not yet been saved. Note: This ONLY works if an association already exists. It will NOT work if the association is nil.

create_association(attributes = {})

Returns a new object of the associated type that has been instantiated with attributes, linked to this object through a foreign key, and that has already been saved (if it passed the validation).

Braintree имеет класс Subscription, но это пространство имен для BraintreeПодписка, так что это не проблема.

...