我尝试在rails4中创建一对多连接。但是,虽然我没有收到错误,但不存储嵌套属性。
我做错了什么?
站的模型
class Station < ActiveRecord::Base
has_many :adresses
accepts_nested_attributes_for :adresses
end
ADRESS-模型
class Adress < ActiveRecord::Base
belongs_to :station
end
站 - 控制器 class StationsController&lt; ApplicationController中
def new
@station = Station.new
@station.adresses.build
end
def create
@station = Station.new(station_params)
@station.save
redirect_to @station
end
def index
@stations = Station.all
end
private
def station_params
params.require(:station).permit(:name, adresses_attributes: [ :url ])
end
end
电台:new.html.erb
<%= form_for :station, url: stations_path do |station| %>
<p>
<%= station.label :name %><br />
<%= station.text_field :name %>
</p>
<%= station.fields_for :adresses do |adress| %>
<div class="field">
<p>
<%= adress.label :url %><br />
<%= adress.text_field :url %>
</p>
</div>
<% end %>
<p>
<%= station.submit %>
</p>
<% end %>
[编辑]
我构建了一个这个问题的最小例子,并在此处将其记录为逐步说明:https://groups.google.com/forum/#!topic/rubyonrails-talk/4RF_CFChua0
答案 0 :(得分:11)
在Rails 4中,您还需要允许id
的{{1}}属性。请这样做:
adresses
我仍在努力寻找官方文件:(
答案 1 :(得分:3)
您应该使用form_for @station
而不是form_for :station
(使用实例而不是符号)。
干杯
答案 2 :(得分:0)
def create
@station = Station.new
@station.update_attributes(station_params)
redirect_to @station
end
而不是:
def create
@station = Station.new(station_params)
@station.save
redirect_to @station
end