填充belongs_to关联中的外键

时间:2014-02-16 05:08:02

标签: ruby-on-rails foreign-keys associations belongs-to

基本上,我需要的是我的业务表中的template_id字段要正确分配,这样如果我做了Business.first.template,它将返回当前为该业务分配的模板的结果。目前我得到的只是'nil'

在我的项目中,业务属于一个模板(我相信这会将主键放在模板表中,而外键放在业务表中)。

class Business < ActiveRecord::Base
belongs_to :template

class Template < ActiveRecord::Base
has_many :businesses

当用户填写“新业务”表单时,他们会选择要使用的模板。模板表已经填充了3个模板,template_id,0,1,2(所以如果需要'创建',我真的无法解决)。通过表单限制用户只选择3个模板中的一个(单选按钮)。

提交表单和创建业务时,当前未创建业务和模板之间的链接。我在业务类中没有关于模板创建的任何内容,因为我无法确定需要创建的内容,模板记录已经存在于模板表中并且是静态的。

Business Controller
  def new
    @business = current_user.businesses.build
    @business.addresses.build
  end

  # POST /businesses
  def create
    @business = Business.new(business_params)
    @business.users << current_user
    if @business.save
      redirect_to @business, notice: 'Business was successfully created.'
    else
      render action: 'new'
    end
  end

  def business_params
    params.require(:business).permit(:name, :email, :template_id, addresses_attributes [:number, :street, :suburb, :state, :country], template_attributes: [:name])

我不确定自己是应该自己分配template_id还是使用'build_template'来做某事

模式

  create_table "businesses", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
    t.string   "description"
    t.string   "sub_heading"
    t.string   "email"
    t.integer  "template_id"
  end

  create_table "templates", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "name"
    t.integer  "cost"
  end

我不确定是否应该将值直接从用户提交的表单中的0,1或2分配给业务表中的template_id,或者我是否应该允许嵌套属性,就像我对地址表所做的那样

感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分:0)

模板ID的外键可以正常使用。它将Business的实例与Template的实例绑定在一起。

您不是在创建模板,而是从已创建模板列表中选择一个模板。您可以访问商家的模板应该像Business.find(id).template一样简单,其中Id是您想要了解的商家的ID。