Пользователь может иметь только два типа подписей: DailySubscription и WeeklySubscription. Когда пользователь находится в новом и редактируемом действии, я бы хотел, чтобы они отметили любую из подписей, которые они хотели бы получить.Создание ассоциаций с помощью флажков
Мне комфортно использовать вложенные поля (как показано на снимке Райана Бейтса here), но я думаю, что когда я добавляю наследование, это действительно усложняет вопросы. Есть ли лучший способ?
class User < ActiveRecord::Base
has_many :subscriptions
end
class Subscription < ActiveRecord::Base
belongs_to :user
# type field is defined in the migration for Single Table Inheritance
end
class DailySubscription < Subscription
# Business logic here
end
class WeeklySubscription < Subscription
# Different business logic here
end
Мои первоначальные усилия с контроллером являются дурацким:
class UsersController < ApplicationController
def new
@user = User.new
# I can't use @user. subscriptions.build as Rails doesn't
# know what type of model to add!
@user.subscriptions = [DailySubscription.new, WeeklySubscription.new]
end
...
end
Я думаю, что я действительно концептуально-то здесь отсутствует, но я не могу понять это. Помогите!
Являются ли ежедневные подписки и еженедельные подписки взаимоисключающими? Может ли пользователь иметь более одной подписки того же типа? Возможно, вы хотите, чтобы пользователь имел одну из DailySubscription и has_one WeeklySubscription. –
Вы можете передать локальную переменную в представление вместо создания новых подписей (оставьте их пустыми), если только пользователю больше не нужно делать, чем устанавливать флажок. В действии create вы можете прочитать значение флажка из хэша params и решить, какая подписка должна быть создана. – weltraumpirat
@Jimmy. Пользователь может иметь оба. Возможно, у пользователя может быть больше. – jevy