принимает вложенные атрибуты для: что я делаю не так


Я пытаюсь создать соединение один-ко-многим в Rails 4. Однако, хотя я не получаю ошибки, вложенный атрибут не сохраняется.

Что я делаю не так?

Модели Станций

class Station < ActiveRecord::Base
    has_many :adresses

    accepts_nested_attributes_for :adresses
end

Адрес-Модель

    class Adress < ActiveRecord::Base
        belongs_to :station
    end

Станция-Контроллер класс StationsController

    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

Станция: новая.формат 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 %>

[edit]
Я построил минимальный пример этой проблемы и задокументировал его в качестве пошаговой инструкции здесь: https://groups.google.com/forum/#! тема/rubyonrails-talk/4RF_CFChua0

3 5

3 ответа:

Вы должны использовать form_for @station вместо form_for :station (Используйте экземпляр вместо символа).

Ура

В Rails 4 также необходимо разрешить атрибут id для adresses. Пожалуйста, сделайте это:

def station_params
    params.require(:station).permit(:name, adresses_attributes: [ :url, :id ])
end

Я все еще пытаюсь найти официальную документацию для этого : (

В классе 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