【问题标题】:nested attributes not displaying form correctly嵌套属性未正确显示表单
【发布时间】:2013-06-05 11:50:33
【问题描述】:

我有一个来自用户的表单

<%= form_for(@user) do |f| %>
  <%= f.fields_for :businesses do |field| %>
    <div class="field">
      <%= field.label :address %>
      <%= field.text_field :address %>
    </div>   
    <div class="field">
      <%= field.label :city %>
      <%= field.text_field :city %>
    </div>  
  <% end %>
<% end %>

它不显示我的字段,但是当我将businesses 更改为business 时,它会显示,或者如果我从f.fields_for 中删除f。但我认为它不能正确保存到数据库中。

我的用户模型

class User < ActiveRecord::Base
  has_many :businesses
  accepts_nested_attributes_for :businesses
en

我的商业模式

class Business < ActiveRecord::Base
  attr_accessible :user_id, :address, :city
  belongs_to :user
end

我的业务迁移

class CreateBusinesses < ActiveRecord::Migration
  def change
    create_table :businesses do |t|
      t.integer :user_id
      t.string :address
      t.string :city

      t.timestamps
    end
  end
end

关于我做错了什么有什么建议吗?

谢谢

【问题讨论】:

  • 该用户有业务吗?

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 nested-attributes


【解决方案1】:

您应该先建立一个企业,然后才能为其显示表单:

@user.businesses.build

在使用fields_for之前使用它

还可以查看这个用于管理嵌套表单的绝妙珍品:

https://github.com/ryanb/nested_form

【讨论】:

  • 所以用户需要先有业务才能显示表单?但是如果我想让用户输入一个业务呢?
  • 当我输入&lt;%= f.fields_for :businesses, @user.businesses.build do |field| %&gt; 时,我能够显示字段但是现在当我保存我的数据库时,信息没有显示在字段中?如果我想编辑我的信息,我的值是否应该自动显示在字段中?如果我这样做 &lt;%= @user.businesses %&gt; 它会显示我保存的文件。
  • 当我尝试在addresscity 字段中插入更多信息时,它只是不断添加新数据,它应该覆盖原始数据吗?
  • 我发现我应该将 @user.businesses.build 放在 users_controller 中的 new 操作中
  • 找到它:在has_one 关系中,它是@user.build_preferences。多亏了这篇文章才找到它:stackoverflow.com/questions/2472982/…
猜你喜欢
  • 1970-01-01
  • 2015-09-02
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多