到目前为止,我目前的HABTM实现工作:has_and_belongs_to_many.通知和隐私都继承自Preference.偏好是STI.我想尝试使用:has_many,:通过关联代替.
模型文件
class User < ActiveRecord::Base has_and_belongs_to_many :preferences end class Preference < ActiveRecord::Base has_and_belongs_to_many :users end class Notification < Preference end class Privacy < Preference end
迁移文件
class UsersHaveAndBelongToManyPreferences < ActiveRecord::Migration def self.up create_table :preferences_users,:id => false do |t| t.references :preference,:user t.timestamps end end def self.down drop_table :preferences_users end end class CreatePreferences < ActiveRecord::Migration def self.up create_table :preferences do |t| t.string :title t.text :description t.string :type t.timestamps end end def self.down drop_table :preferences end end class DeviseCreateUsers < ActiveRecord::Migration def self.up create_table(:users) do |t| t.string :name t.timestamps end end def self.down drop_table :users end end
我尝试了以下内容
class User < ActiveRecord::Base has_many :preferences,:through => :preferences_users end class Preference < ActiveRecord::Base has_many :users,:through => :preferences_users end
我的表格看起来像
<% Preference.where(:type => 'Notification').all.each do |notification| %> <li> <%= check_Box_tag 'user[preference_ids][]',notification.id,@user.preference_ids.blank? ? false : @user.preferences.include?(notification) %> <%= label_tag notification.description %> </li> <% end %>
我明白了
Could not find the association :preferences_users in model User
我究竟做错了什么?是我的形式还是我的协会中的问题?
解决方法
好的,它得到了它的工作.我需要一个模型PreferencesUser,并且在用户和偏好模型上缺少has_many:preferences_users:
class PreferencesUser < ActiveRecord::Base belongs_to :user belongs_to :preference end class User < ActiveRecord::Base has_many :preferences_users has_many :preferences,:through => :preferences_users end class Preference < ActiveRecord::Base has_many :preferences_users has_many :users,:through => :preferences_users end
没有必要改变我的形式.希望这有助于某人