Вопрос по ruby-on-rails-4, ruby-on-rails, nested-attributes, one-to-many, nested-forms – accepts_nested_attributes_for: что я делаю не так

5

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

Что я делаю неправильно?

Станция-Models

class Station < ActiveRecord::Base
    has_many :adresses

    accepts_nested_attributes_for :adresses
end

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

    class Adress < ActiveRecord::Base
        belongs_to :station
    end

Станция-контроллер класс StationsController < 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


    <p>
        <br>
        
    </p>
    
        
            <p>
                <br>
                
            </p>
        
    
    <p>
        
    </p>

[редактировать]

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

Здравствуйте, просматривая весь код, который вы разместили, я думаю, что тамТакже проблема вновый» действие в вашем PeopleController. Так должно бытьdef new @person = Person.new @phones= @person.phonesb.build phron
Если нет адреса контроллера, то виновника нельзя найти в нем ^ _ ^. Что происходит, когда вы пытаетесь в консоли создать станцию и ее адреса? журнал может помочь вам увидеть, что происходит ... phron
@phron, вы были правы насчет @. Смотри сюда:stackoverflow.com/questions/17622741/... - Если бы вы могли добавить ответ об этом, я мог бы принять это! speendo
Не беспокойся, я все время неправильно пишу! :) Если @phron 'предложение не делаетвозможно, это не работает для васэтот Railscast может помочь? CodeBiker

Ваш Ответ

3   ответа
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
спасибо, но это нене решить проблему ... :( speendo
11

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

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

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

id требуется только для обновлений, но поскольку вы, скорее всего, будете использовать тот же метод для разрешения параметров, он выиграетбольно включатьid в списке разрешенных атрибутов для адреса. jvnill
3

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

ура

Похожие вопросы