Has_many:通过查询创建方法

时间:2014-04-13 14:17:33

标签: ruby-on-rails-4 controller has-many-through

我正在开发一款包含usersvenuesgroups的应用。我已经创建了我的模型,我对它们非常满意,但是我对控制器感到有些困惑。我大多数都有has_many :through个关系。例如,我有user模型,venue模型和user_venue模型,其中包含user_idvenue_idadmin column。我想在创建场地时自动使用户成为管理员(增加管理列1),同时也构建实例。其他用户也可以在不成为管理员的情况下将自己与场地联系起来。

我的模型如下:

class User < ActiveRecord::Base
  has_many :venues, through: :user_venues
  has_many :user_venues
end

class Venue < ActiveRecord::Base
    has_many :users, through: :user_venues
    has_many :user_venues
end

class UserVenue < ActiveRecord::Base
    belongs_to :users
    belongs_to :venues
    validates :user_id, presence: true
    validates :venue_id, presence: true
end

让用户创建场地并成为管理员,并允许其他用户创建关联的最佳方式是什么。我假设一旦初始场地被创建,它只是使用user_venue控制器的问题,我只是在努力处理抽象模型。我也想过要求一些建议可以确保它不是一个安全噩梦通过抨击它! group模型的工作方式相同。

我相信这对某人来说是一个简单的答案!

修改

我已经在这个工作了4个小时了,现在仍然无法看到解决方案,我甚至无法在网上找到它。到目前为止,我对Venue Controller的创建定义如下:

def create
  admin = 1
  @user = current_user
  @venue = Venue.create(venue_params)
  @user_venue = UserVenue.new user_id: @user.id, venue_id: @venue.id, admin:  admin
  @user_venue.save
end

遗憾的是,这仍然只能完成venues表而不是user_venues表。

1 个答案:

答案 0 :(得分:0)

我解决了......事实证明我只需要将belongs_to关系设为非复数并使用以下创建方法:

@venue = Venue.create(venue_params)
@venue.users << current_user

它建立了这种关系。现在我只需要编写代码,在create!...

上向user_groups表添加一个属性