ユーザーには、DailySubscriptionとWeeklySubscriptionという2種類のサブスクリプションしかない場合があります。ユーザーが新しく編集操作を行っているときに、自分が購読したい購読のどちらかをチェックすることをお勧めします。チェックボックスを使用した関連付けの作成
(Ryan Batesのスクリーンキャスト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
私は概念的には本当にここに何かが足りないと思うが、私はそれを把握することはできません。助けて!
DailySubscriptionsとWeeklySubscriptionsは排他的ですか?ユーザーが同じタイプの複数のサブスクリプションを持つことはできますか?おそらくあなたが望むのは、ユーザーがhave_one DailySubscriptionとhave_one WeeklySubscriptionを持つことです。 –
ユーザーがチェックボックスをチェックするよりも多くのことがない限り、新しいサブスクリプションを作成する代わりにローカル変数をビューに渡すことができます(空のままにします)。作成アクションでは、paramsハッシュからチェックボックスの値を読み取り、作成するサブスクリプションを決定することができます。 – weltraumpirat
@ジミー。ユーザーは両方を持つことができます。ユーザーにはもっと多くの情報がある可能性があります。 – jevy