accepts_nested_attributes_for:我做错了什么

时间:2013-07-09 21:12:11

标签: ruby-on-rails one-to-many nested-forms nested-attributes ruby-on-rails-4

我尝试在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

3 个答案:

答案 0 :(得分:11)

在Rails 4中,您还需要允许id的{​​{1}}属性。请这样做:

adresses

我仍在努力寻找官方文件:(

答案 1 :(得分:3)

您应该使用form_for @station而不是form_for :station(使用实例而不是符号)。

干杯

答案 2 :(得分:0)

在StationController类中,我会这样做:

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