提示 - 使用has_and_belongs_to_many关系帮助嵌套表单

时间:2016-06-15 22:54:41

标签: ruby-on-rails forms activerecord

我在铁轨上学习红宝石,这是我在SO中的第二个问题。我正在制作数据库来管理产品。在我的squema的一部分,我有可以拥有许多品牌的用户,以及可以拥有许多用户的品牌。我想创建一个嵌套表单来创建一个新用户(注册),该用户有一个用于输入用户品牌名称的字段,用于创建与该用户关联的品牌对象。

所以我的squema看起来像这样:

class Brand < ActiveRecord::Base
  has_and_belongs_to_many :users
  .
  .
  .
end
class User < ActiveRecord::Base
  has_and_belongs_to_many :brands
  accepts_nested_attributes_for :brands
  .
  .
  .
end
ActiveRecord::Schema.define(version: 20160614163029) do

  create_table "brands", force: :cascade do |t|
    t.string   "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "brands_users", id: false, force: :cascade do |t|
    t.integer "user_id"
    t.integer "brand_id"
  end

  add_index "brands_users", ["brand_id"], name: "index_brands_users_on_brand_id"
  add_index "brands_users", ["user_id"], name: "index_brands_users_on_user_id"

  create_table "users", force: :cascade do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at",                        null: false
    t.datetime "updated_at",                        null: false
    t.string   "password_digest"
    t.string   "remember_digest"
    t.boolean  "admin",             default: false
    t.string   "activation_digest"
    t.boolean  "activated",         default: false
    t.datetime "activated_at"
    t.string   "reset_digest"
    t.datetime "reset_sent_at"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true

end

我试图在我的用户创建表单中添加用于通过嵌套表单添加品牌名称的字段,但没有成功。

<div class="row">
  <div class="col-md-6 col-md-offset-3">
    <%= form_for(@user) do |f| %>
      <%= render 'shared/error_messages' %>

      <%= f.label :name, "Nombre:" %>
      <%= f.text_field :name, class: 'form-control' %>

      <%= f.label :email, "Correo Electrónico:" %>
      <%= f.email_field :email, class: 'form-control' %>

      <%= f.label :password, "Contraseña:" %>
      <%= f.password_field :password, class: 'form-control' %>

      <%= f.label :password_confirmation, "Confirmación de Contraseña:" %>
      <%= f.password_field :password_confirmation, class: 'form-control' %>

      <%= f.fields_for :brands do |ff| %>
        <%= ff.label :name, "Nombre de tu Marca:" %>
        <%= ff.text_field :name, class: 'form-control' %>
      <% end %>

      <%= f.submit "Crear Cuenta", class: "btn btn-primary" %>
    <% end %>
  </div>
</div>

此表单仅为用户形成表单的文本字段。 我有点迷失了。欢迎任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

我还没有真正使用f.fields_for来嵌套属性。在YesInsights,我使用CocoonSimple Form。使用这些库可以很容易地创建具有嵌套属性的表单 - 您甚至可以添加链接以使用简单的帮助程序在表单中为用户添加更多品牌。