Как создать вложенную форму в Rails 3, которая работает?(Я получаю ошибку маршрутизации.) - PullRequest
3 голосов
/ 08 декабря 2010

У меня есть модель клиента и 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>}

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

1 Ответ

2 голосов
/ 08 декабря 2010

Проблема в том, что ваш вложенный маршрут предназначен для добавления нового 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 и сделайте несколько проб и ошибок, чтобы получить форму, как вы хотите.

...