Rails has_many通过

时间:2016-11-27 13:10:32

标签: ruby-on-rails ruby associations

用户可以创建组织,然后他可以将其他用户作为他的组织的主持人。下面的方法显示了组织的创建方式。

def create                                                   
  @organization = current_user.organizations.build(organization_params)

  # Confirm organization is valid and save or return error   
  if @organization.save!
    # New organization is saved                              
    respond_with(@organization) do |format|                  
      format.json { render :json => @organization.as_json }  
    end
  else
    render 'new', notice: "Unable to create new organization."
  end
end  

我应该如何为组织创建主持人。我尝试使用has_many但它失败了。有人可以帮帮我吗?

更新

组织模式

class Organization < ActiveRecord::Base
  has_many :moderators
  has_many :users, :through => :moderators
end

的usermodel

class User < ActiveRecord::Base
   enum role: [:user, :moderator, :organization, :admin]
   after_initialize :set_default_role, :if => :new_record?

   def set_default_role
     self.role ||= :user
   end

   # Include default devise modules. Others available are:
   # :confirmable, :lockable, :timeoutable and :omniauthable
   devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

   has_many :moderators
   has_many :organizations, :through => :moderators
 end

主持人模型

class Moderator < ActiveRecord::Base
  belongs_to :user
  belongs_to :organization
end

当我创建新组织时,我的组织user_id是nil?

1 个答案:

答案 0 :(得分:0)

看看has并且属于许多关系http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many,因为一个用户可以是许多组织和组织的主持人,可以有很多主持人。此外,您应该调用@organization.save!而不是调用@organization.save,因为如果保存不成功,它将抛出错误。您希望保存结果为布尔值,以便您的条件正常工作