Rails关系,在has_many上创建新模型

时间:2014-03-12 23:06:58

标签: ruby-on-rails ruby ruby-on-rails-4

我有三种模式:“用户”,它有多个“制造商”,每个都有多个“类别”。我希望能够通过制造商对用户的类别进行搜索,并且每个用户会有后两者的倍数 - 用户可以有5或6个制造商,每个制造商有5-6个类别。我得到了与用户关联的制造商,但现在我正在尝试通过脚手架形式创建类别,我无法做到这一点,因此它将manufacturer_id拉入到我与制造商和用户一样的形式。我知道这只是我遗漏的一个参数,但我之前从未做过一个has_many_through协会。

user.rb

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 :manufacturers
  has_many :categories, through: :manufacturers
end

manufacturer.rb

class Manufacturer < ActiveRecord::Base
  belongs_to :user
  has_many :categories
end

category.rb

class Category < ActiveRecord::Base
  belongs_to :manufacturer
  belongs_to :user
end

对于我的制造商控制器中的创建,我刚刚做了:

@manufacturer = current_user.manufacturers.build(manufacturer_params)

但是我尝试在创建我的类别时做类似的事情并没有拉出该类别的制造商的ID。这个的创建功能会是什么样的?它是类别的创建功能,与制造商联系在一起,与用户联系在一起。

2 个答案:

答案 0 :(得分:0)

@category = current_user.categories.new(category_params)
if @category.save
    #do stuff
end

使用new方法会为您提供user_id,保存后会id(成功保存后)。

答案 1 :(得分:0)

看起来您只是想尝试创建另一个嵌套对象。如果是这种情况,则需要先找到两个父对象。

def create
  @user = current_user
  @manufacturer = @user.manufacturers.find(params[:manufacturer_id])
  @category = @manufacturer.categories.build(category_params)
  #if save...####
end