У меня есть сложная форма для планирования событий. Вот сокращенные ассоциации:
class Event < ActiveRecord::Base
belongs_to :client
accepts_nested_attributes_for :client, :reject_if => lambda { |a| a[:name].blank? }
end
class Client < ActiveRecord::Base
has_many :events
has_many :questions, :dependent => :destroy
accepts_nested_attributes_for :questions, :reject_if => lambda { |a| a[:content].blank? }
end
Форма создает новое событие, и у меня есть следующая структура:
- form_for @event do |event_form|
%select=collection_select(client_options_for_select, :options, :group_name, :id, :name, @event.client_id)
- event_form.fields_for :client do |client|
= client.text_field :name
- client.fields_for :questions do |question|
= question.text_field :content
Клиент уже существует и выбирается из меню выбора. Наблюдатель отображает форму вложенных атрибутов, устанавливая клиентскую переменную в действии контроллера и затем визуализируя частичное.
Вот ошибка, которую я получаю:
ActionView::TemplateError (wrong number of arguments (0 for 1)) on line #1 of app/views/proceedings/_questions.html.haml:
1: - event_form.fields_for :client do |client|
app/views/proceedings/_questions.html.haml:1:in `form'
app/views/proceedings/_questions.html.haml:1:in `_run_haml_app47views47events47_client_questions46html46haml_locals_client_questions_object'
haml (3.0.21) rails/./lib/haml/helpers/action_view_mods.rb:13:in `render'
app/controllers/proceedings_controller.rb:261:in `__instance_exec0'
app/controllers/proceedings_controller.rb:260:in `corp_client_questions'
app/controllers/proceedings_controller.rb:258:in `corp_client_questions'
У меня проблемы (я думаю) с ассоциацией принадлежащих между Event и Client. Я не знаю, может ли Событие принять вложенные атрибуты Клиента, когда Событие принадлежит Клиенту. Я всегда делал это наоборот (Клиент принимает вложенные атрибуты Event).
Есть идеи? Я могу уточнить, если вам нужно больше кода или фона. Спасибо!
Обновление: добавлен код контроллера по запросу.
def client_questions
if params[:client_id].blank?
render_no_client_questions
elsif @client = Client.find(params[:client_id]) and @client.is_unspecified?
render_no_client_questions
else
respond_to do |format|
format.js {
render :update do |page|
page[:client_questions].replace_html :partial => 'client_questions', :layout => false
end
}
end
end
конец