2010-10-07 3 views
0

У меня есть форма события с некоторыми вложенными моделями атрибутов. Дополнительные модели отображаются после выбора клиента из поля выбора. Наблюдатель наблюдает и вызывает действие контроллера, которое отображает частичное, содержащее поля для вложенных моделей. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу передать блок «форма» события в недавно оказанное частичное - по крайней мере, я не могу понять, как ...Передача объекта формы частичной визуализации из запроса ajax

Код ниже вызывает ошибку: «Неправильно количество аргументов (0 для 1) ". Любая помощь или предложения приветствуются. Как уже упоминалось ниже, я также хочу повторно реализовать это, используя ненавязчивый JavaScript, если вы можете предоставить пример для этого сценария.

Форма проведения:

<%- form_for @event do |form| %> 

    <%= select_tag :id=>event_client_id %> 
    <%= observe_field :event_client_id, url => {:action => 'client_questions'}, :with => "'client_id=' + encodeURIComponent(value)+'&event_id='+#{@event.id} %> 

Controller Event

def client_questions 
    @event = Event.find(params[:event_id]) 
    @client = Client.find(params[:client_id]) 
    @client_questions = @client.questions.active 
    respond_to do |format| 
    format.js { 
     render :update do |page| 
     page[:client_questions].replace_html :partial => 'client_questions', :layout => false 
     end 
    } 
    end 
end 

_client_questions.html.erb частичная

<%- form.fields_for :client, @client do |client| %> 
    <%= client_text_field :name %> 

    <%- client.fields_for :questions do |question| %> 
    <%=question.text_field :content %> 
+0

Один совет: используйте ненавязчивый javascript http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – marcgg

+0

Я готов внести это изменение. Можете ли вы привести пример для этого сценария? Я, очевидно, использую прототип в этом приложении, чтобы вы могли использовать эту библиотеку. –

+0

Использование ненавязчивого js не имеет никакого значения в этом сценарии. Хотя это считается лучшей практикой, здесь это не актуально. Я хотел бы, чтобы это приложение было ненавязчивым, но поскольку я унаследовал какой-то код elses, у меня не было такого выбора. –

ответ

3

Так что ваша основная форма оказывается в одном действии, и вы надеясь передать объект формы с этого вида, на другой вид, отображаемый во втором частичном? Это не то, что вы можете сделать, но вы можете изменить свой вид код в частичном оказанном во второй раз, так что он делает без необходимости существующего объекта формы, что-то вроде:

<%- fields_for "event[client_attributes]", @client do |client| %> 
    <%= client_text_field :name %> 

    <%- client.fields_for :questions do |question| %> 
    <%= question.text_field :content %> 

Я не запускать этот чтобы проверить его, поэтому сравните html, который он генерирует с html, который ваш существующий частичный сгенерировал бы, если бы он был визуализирован в том же действии, что и основная форма.

+0

Хорошая идея! Я собираюсь попробовать это. Я вернусь к вам о своем прогрессе и посмотрю, работает ли это. –

+0

Он работает с небольшим изменением. Он должен читать «event [client_attributes]», .... потому что это вложенная модель атрибута –

+0

Рад услышать Nate, я обновлю ответ для других ссылок. – Jeremy

Смежные вопросы