Как создать работающую вложенную форму в Rails 3? (Я получаю сообщение об ошибке маршрутизации.)

У меня есть модель Client и ProposalRequest, которые выглядят так:

class Client < ActiveRecord::Base
  has_many :proposal_requests
  accepts_nested_attributes_for :proposal_requests, :allow_destroy => true
end

class ProposalRequest < ActiveRecord::Base
  belongs_to :client

end

В моем файле маршрутов я, как обычно, включил вложенные маршруты.

resources :clients do
  resources :proposal_requests
end

И это моя форма до сих пор:

-semantic_form_for [Client.new, ProposalRequest.new] do |f|
   =f.inputs
   =f.buttons

Но после этого я застрял из-за этой ошибки.

No route matches {:controller=>"proposal_requests", :client_id=>#<Client id: nil, name: nil, title: nil, organization: nil, street_address: nil, city: nil, state: nil, zip: nil, phone: nil, email: nil, status: "interested", how_you_heard: nil, created_at: nil, updated_at: nil>}

Может ли кто-нибудь помочь мне разобраться с этой ошибкой?


person picardo    schedule 08.12.2010    source источник


Ответы (1)


Проблема в том, что ваш вложенный маршрут предназначен для добавления нового ProposalRequest к существующему Client. Если вы хотите создать Client и ProposalRequest одновременно, вам нужно просто использовать new_client_path и semantic_form_for @client do |f|.

Я бы порекомендовал вам сделать следующее в вашем clients_controller:

def new
  @client = Client.find(params[:id])
  @client.proposal_requests.build
end

И на ваш взгляд:

semantic_form_for @client do |f|      
  = f.inputs # fields for client
  = f.inputs :name => 'Proposal Request', :for => :proposal_requests do |pf|
    = pf.input :some_proposal_request_attribute
  = f.buttons

Надеюсь это поможет. Обязательно просмотрите все примеры на странице https://github.com/justinfrench/formtastic и выполните некоторые проб и ошибок, чтобы получить форму, как вы хотите.

person bowsersenior    schedule 08.12.2010