0

我希望能够为我的用户分配类别(最多 2 个,允许 1 个)。我希望此用户的任何帖子仅从同一类别列表中分配一个类别(在我的应用程序中称为职业)。

目前,我已经对其进行了配置,以便我可以为每个分配 1,在用户、帖子和专业模型之间具有简单的 belongs_to 和 has_many 关联。这适用于帖子,因为它只需要 1 个专业分配,但对于用户来说,它限制了 2 个的能力。

用户的视图有两个下拉列表,由专业中的项目填充。我可以选择两种不同的职业,但只有一种保留了该职业的价值,我希望它保留这两种职业,或者如果只选择一种,则只接受一种。我的主要限制是,在用户数据库中,只有一个职业列引用了职业 ID。无法复制职业栏,如何设置才能添加第二个职业栏?

或者,我应该如何改变我的数据库设计和模型来完成这个?

用户.rb:

    class User < ActiveRecord::Base
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :trackable, :validatable

      attr_accessible :email, 
                      :password, 
                      :password_confirmation,
                      :remember_me, 
                      :first_name, 
                      :last_name, 
                      :profile_name, 
                      :full_bio, 
                      :mini_bio,
                      :current_password,
                      :photo,
                      :profession_id

      attr_accessor :current_password

      validates :first_name, :last_name, :profile_name, presence: true

      validates :profile_name, uniqueness: true,
                               format: {
                                  with: /^[a-zA-Z0-9_-]+$/
                               }

      has_many :posts
      belongs_to :profession

      has_attached_file :photo,
                        :default_url => 'default.png'


      def full_name
        first_name + " " + last_name
      end
    end

post.rb:

    class Post < ActiveRecord::Base
      attr_accessible :content, :name, :user_id, :profession_id
      belongs_to :user
      belongs_to :profession

      validates :content, presence: true,
                  length: { minimum: 2 }

      validates :name, presence: true,
                  length: { minimum: 2 }

      validates :user_id, presence: true

    end

职业.rb:

    class Profession < ActiveRecord::Base
      attr_accessible :name

      has_many :posts
      has_many :users
    end
4

1 回答 1

0

在这种情况下,has_many :through您的用户和专业的关联可能效果最好。使用诸如“Specialty”之类的附加模型,您可以对这种关系进行建模,如下所示:

class User < ActiveRecord::Base
  has_many :specialties
  has_many :professions, :through => :specialties
end

class Profession < ActiveRecord::Base
  has_many :specialties
  has_many :users, :through => :specialties
end

class Specialty < ActiveRecord::Base
  belongs_to :user
  belongs_to :profession
end

然后,您可以在视图中使用nested_form gem来接受与该用户关联的职业。

于 2012-12-27T22:42:28.177 回答