Вложенные атрибуты не сохраняются - PullRequest
0 голосов
/ 08 октября 2010

У меня есть форма для создания / редактирования события. В раскрывающемся списке «Клиент» отображаются пользовательские вопросы и ответы в зависимости от выбранного клиента.

Я использую Rails 2.3.9 с Ruby 1.8.6 и Mongrel на Windows. Вот соответствующий код:

Форма события

- form_for @event do |f|
    ....
    = f.collection_select(:client_id, Client.all, :id, :name)

    #custom_client_fields
      = render 'client_fields' if @client

    = observe_field :event_client_id, :url => {:action => 'client_fields'}, 
                    :with => "'client_id=' + encodeURIComponent(value)"
    ....

_client_fields.html.haml

- fields_for "event[client_attributes]", @client do |client|
  - client.fields_for :questions do |question|
    %label.question= question.object.content
    - question.fields_for :answers, Answer.new do |answer|
      = answer.text_field:content, :maxlength => 150, :size => 40

Контроллер событий

def client_fields
  if params[:client_id].blank?
    render_no_client_fields #self explanatory
  else
    respond_to do |format|
      format.js {
        render :update do |page|
          page[:custom_client_fields].replace_html :partial => 'client_fields', :layout => false
        end
      }
    end
  end
end

Хэш параметра

Parameters: {
  "event"=>{
    "id"=>"2",
    "client_attributes"=>{
      "questions_attributes"=>{
        "0"=>{
          "id"=>"4",
          "answers_attributes"=>{
            "0"=>{
              "content"=>"fjhkghjkk"
            }
          } 
        }
      }
    }
  }
}

В основном форма проходит валидацию и все, кроме вложенных атрибутов. В таблицу базы данных ничего не вставлено.

При просмотре хэша параметра у моих client_attributes нет идентификатора ... хммм ...

1 Ответ

2 голосов
/ 13 октября 2010

В частичку client_fields мне пришлось добавить следующий код для установки client_attributes_id:

<input id="event_client_attributes_id" name="event[client_attributes][id]" type="hidden" value="#{@client.id}">

Примечание для себя: если вы не используете помощников магических форм Rails, вам также нужно создать остальную часть формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...