【问题标题】:Rails nested form for belongs_to用于 belongs_to 的 Rails 嵌套表单
【发布时间】:2012-03-24 20:41:58
【问题描述】:

我是 Rails 新手,在创建嵌套表单时遇到了一些麻烦。

我的模型:

class User < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, :reject_if => :all_blank
end

class Company < ActiveRecord::Base
  has_many :users
end

现在我想通过仅给定公司名称从用户注册页面(我使用 Devise,BTW)创建一个新公司。并在新用户和新公司之间建立关系。

在控制台中,我可以像这样为现有用户创建公司:

@company = User.first.build_company(:name => "name of company")
@company.save

这行得通,但我无法为新用户做到这一点。在我的新用户注册表单中,我尝试了这个(我知道首先创建一个新用户是错误的,但我正试图让一些东西在这里工作。)

<%= simple_form_for(resource, :as => resource_name, :html => { :class => 'form-horizontal' }, :url => registration_path(resource_name)) do |f| %>
<%= f.error_notification %>

<div class="inputs">
  <% 
    @user = User.new
    company = @user.build_company()

  %>
  <% f.fields_for company  do |builder| %>
      <%= builder.input :name, :required => true, :autofocus => true %>
  <% end %>      

  <%= f.input :email, :required => true, :autofocus => true %>
  <%= f.input :password, :required => true %>
  <%= f.input :password_confirmation, :required => true %>
</div>

<div class="form-actions">
  <%= f.button :submit, :class => 'btn-primary', :value => 'Sign up' %>
</div>

我已尽力向 Google 寻求解决方案/示例。我发现了一些嵌套 形成示例,但我不清楚如何执行此操作。

【问题讨论】:

  • 你遇到了什么错误?
  • 我没有收到错误,只是表单中没有“公司名称”文本字段..

标签: ruby-on-rails devise nested-forms


【解决方案1】:

如果你使用 Devise - 我猜在用户模型中你有:

attr_accessible :email, :password, :password_confirmation

所以,如果这是真的 - 我认为这可能会有所帮助:

class User < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, :reject_if => :all_blank
  ...
  attr_accessible :email, :password, :password_confirmation, :company_attributes
end

表格:

<% resource.build_company %>
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= f.error_notification %>

<div class="inputs">
  <%= f.fields_for :company  do |builder| %>
      <%= builder.input :name, :required => true, :autofocus => true %>
  <% end %>      

  <%= f.input :email, :required => true, :autofocus => true %>
  <%= f.input :password, :required => true %>
  <%= f.input :password_confirmation, :required => true %>
</div>

<div class="form-actions">
  <%= f.button :submit, :class => 'btn-primary', :value => 'Sign up' %>
</div>

【讨论】:

  • 谢谢你的回答,这对我来说很有意义,但它还没有工作......所以表单资源是用户对象,我们尝试建立公司关系,并且 attr_accessible :company_attributes 允许al 公司字段可从用户表单访问。因此,我已将您的代码用于我的模型和表单,但表单未显示公司“名称”字段,并且在我的 seed.rb 中,我尝试为种子用户设置:company_id,但出现错误:无法批量- 分配受保护的属性:company_id 关于哪里出了问题有什么想法吗?谢谢!
  • 我在我的用户模型中添加了 :company_id 到 attr_accessible,现在种子可以工作了。但是表格没有显示我的公司名称字段。我没有收到任何错误,当我执行 时,我只看到用户模型属性。我现在真的不知道在哪里找..
  • 我弄错了,把"
  • 就是这样!感谢您的帮助,非常感谢。问候丹尼尔
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多