如何将两个表中的数据显示为一个表单

时间:2013-04-14 13:28:17

标签: ruby-on-rails ruby database show

我使用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'

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

在RailsCasts上查看第196和197集:

  1. http://railscasts.com/episodes/196-nested-model-form-part-1
  2. http://railscasts.com/episodes/197-nested-model-form-part-2
  3. 有196的修订剧集,您需要订阅RailsCasts。

    我强烈建议订阅像RailsCasts和CodeSchool这样的学习网站,以正确的方式更快地学习RoR

答案 1 :(得分:0)

尝试:

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

并在您的观点上:

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

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