0

我使用 Ruby v 3。我想将 2 个表中的数据显示为一种形式。我的模型:

class Address < ActiveRecord::Base
  attr_accessible :city, :number, :street

  validates :city, :presence => true
  validates :number, :presence => true
  validates :street, :presence => true

  has_many :users
end

class User < ActiveRecord::Base
  belongs_to :address
  attr_accessible :name, :phone, :surname, :address_attributes
  accepts_nested_attributes_for :address
end

我的表格看起来像:

<%= form_for(@user) do |f| %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :surname %><br />
    <%= f.text_field :surname %>
  </div>
  <div class="field">
    <%= f.label :phone %><br />
    <%= f.text_field :phone %>
  </div>

  <%= f.fields_for :address_attributes do |p| %>
  <div class="field">
    <%= p.label :city %><br />
    <%= p.text_field :city %>
  </div>
  <div class="field">
    <%= p.label :street %><br />
    <%= p.text_field :street %>
  </div>
  <div class="field">
    <%= p.label :number %><br />
    <%= p.text_field :number %>
  </div>
 <% end %>
 <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

如您所见,我使用 fields_for 方法。我的控制器在这里:

def edit
  @user = User.find(params[:id])
  @user.address_attributes = @user.address
end

它不起作用,我完全不知道为什么。当我单击地址列表上的编辑时,出现错误:

 undefined method `with_indifferent_access'

任何人都可以帮我弄清楚吗?

4

2 回答 2

2

查看 RailsCast 的第 196 和 197 集:

  1. http://railscasts.com/episodes/196-nested-model-form-part-1
  2. http://railscasts.com/episodes/197-nested-model-form-part-2

有一个 196 的修订剧集,您需要订阅 RailsCasts。

我强烈建议订阅 RailsCasts 和 CodeSchool 等学习网站,以更快正确地学习 RoR。

于 2013-04-14T14:17:25.773 回答
0

试着做:

def edit
  @user = User.find(parmas[:id])
end

在您看来:

<%= f.fields_for :address do |p| %>

看看它是否有效,您不必添加属性

于 2013-04-14T13:32:41.390 回答