我正在开发一个Rails应用程序,用户可以创建一个杂志,另一个用户可以订阅该杂志。我想知道最好的方法。
目前我有一个订阅模型,在创建时从当前用户构建,并将当前杂志用作magazine_id。这允许我有一个user_ids和magazine_ids的表。这允许我查看所有订阅,但这意味着我无法轻松检查某人订阅的所有杂志或检查杂志的所有订阅者。
当我尝试使用has_many:through时,它会从当前用户构建时抛出错误。我已经在下面列出了相关代码,希望它涵盖了所有内容,并提前感谢。
用户模型:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :magazines
has_many :subscriptions
end
订阅模式:
class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :magazine
end
杂志模特:
class Magazine < ActiveRecord::Base
belongs_to :user
has_many :subscrptions
has_many :users
end
订阅控制器中的代码片段在我使用时会抛出错误,其中包含许多
def new
@subscription = current_user.subscriptions.build
@sub = Sub.find(params[:sub_id])
end
希望这对于某人来说已经足够了解,如果没有,请向我询问其他代码或信息。
答案 0 :(得分:2)
你非常接近,你只是错过了连接。 杂志可以看到订阅,因为订阅有magazine_id
。 用户可以看到订阅,因为订阅有user_id
。通过订阅,杂志和用户可以看到对方。所以你想要用through
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :magazines, through: :subscriptions
has_many :subscriptions
end
class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :magazine
end
class Magazine < ActiveRecord::Base
belongs_to :user
has_many :subscriptions
has_many :users, through: :subscriptions
end
如果这不起作用,请确保从您提到的表中发布schema.rb /相关字段。
答案 1 :(得分:-1)
我认为这应该可行,但可能需要设置其他选项。
用户模型:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :magazines
has_many :subscriptions
has_many :subscribed_magazines, through: :subscriptions, source: :magazine
end
订阅模式:
class Subscription < ActiveRecord::Base
belongs_to :user
belongs_to :magazine
end
杂志模特:
class Magazine < ActiveRecord::Base
belongs_to :user
has_many :subscriptions
has_many :subscribed_users, through: :subscriptions, source: :user
end
编辑:需要的来源,而不是class_name