4

我不确定如何正确创建带有嵌套表单的 Rails 表单。我已经学习了很多教程,但变得更加困惑应该是什么,单数复数,控制器......这是我的模型

模型/事件.rb

  attr_accessible :description :title, :tag_ids, :locations_attributes
  has_many :location
  accepts_nested_attributes_for :location, :allow_destroy => true

模型/位置.rb

  attr_accessible :address, :customer_id, :event_id, :latitude, :longitude
  belongs_to :customer
  belongs_to :event

控制器.rb

  def new
    @event = Event.new
    ...
  def create
    @event = Event.new(params[:event])
    ...

查看 form.html.erb

<%= form_for(@event) do |f| %>
  <%= f.fields_for :locations do |e| %>
    <%= e.text_field :longitude %>
    <%= e.text_field :latitude %>
  <% end %>
  ...
<% end %>

错误

Can't mass-assign protected attributes: locations

参数发送

 "locations"=>{"longitude"=>"45.6666",
 "latitude"=>"47.44444665"},

要么我的关系是错误的,因为 fields_for 不支持它,要么我的控制器不合适,要么 rails 不是一门好语言,或者我不再理解它。

4

2 回答 2

2

你……快到了……

event.rb - 位置不是位置

attr_accessible :description :title, :tag_ids, :locations_attributes
has_many :locations
accepts_nested_attributes_for :locations, :allow_destroy => true

我认为应该这样做

编辑

正如 Valery Kvon 所说,您需要添加

@event.locations.build

到你的控制器

于 2013-01-05T20:44:09.590 回答
1

爱德华的回答 +

def new
  @event = Event.new
  @event.locations.build
end
于 2013-01-05T21:46:05.207 回答