Rails 3 Неопределенный метод вложенных ресурсов - PullRequest
1 голос
/ 22 июля 2010

В Rails 3 edge я настроил два вложенных ресурса:

config/routes.rb

resources :agencies do
   resources :properties
end

Я использую Mongomapper в качестве своего ORM, и когда я пытаюсь создать новое свойство в существующем агентстве, я получаю эту ошибку:

---> http://localhost:3000/agencies/4c3ff0f455899f0fb5000001/properties/new

NoMethodError in Properties#new

Showing /Users/peter/programming-MacBookPro/iPhone/inspector-on-rails/app/views/properties/_form.html.erb where line #1 raised:

undefined method `properties_path' for #<#<Class:0x00000100dae020>:0x00000100d97f00>
Extracted source (around line #1):

1: <%= form_for @property do |f| %>
2: <% if @property.errors.any? %>
3:    <div id="error_explanation">
4:      <h2><%= pluralize(@property.errors.count, "error") %> prohibited this property from being saved:</h2>
Trace of template inclusion: app/views/properties/new.html.erb

Rails.root: /Users/peter/programming-MacBookPro/p-on-rails

Application Trace | Framework Trace | Full Trace
app/views/properties/_form.html.erb:1
app/views/properties/new.html.erb:3
app/controllers/properties_controller.rb:29:in `new'
Request

Parameters:

{"agency_id"=>"4c3ff0f455899f0fb5000001"}

В properties_controller.rb:

def new
    @property = Property.new

    respond_to do |format|
      format.html # new.html.erb
      format.json  { render :json => @property }
    end
end

в приложении / views / properties / _form.html.erb:

<%= form_for @property do |f| %>
<% if @property.errors.any? %>
   <div id="error_explanation">
     <h2><%= pluralize(@property.errors.count, "error") %> prohibited this property from being saved:</h2>

     <ul>
     <% @property.errors.full_messages.each do |msg| %>
       <li><%= msg %></li>
     <% end %>
     </ul>
   </div>
 <% end %>
 <div class="field">
     <%= f.label :address_postcode %><br />
     <%= f.text_field :address_postcode %>
   </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

В приложении / views / properties / new.html.erb:

<h1>New property</h1>
<%= render 'form' %>
<%= link_to 'Back', @property %>

Я подозреваю, что ошибка о том, что properties_path не определен, как-то связана с вложением ресурса свойств в агентствах. Однако я не могу понять, как поступить с жалобой в строке 1 _form.html.erb, так как что-то вроде form_for (@agency, @property) не работает.

Есть идеи?

1 Ответ

2 голосов
/ 22 июля 2010

в соответствии с вашим маршрутом, собственность вложена в агентство, верно?

, чтобы избежать ошибок, вы можете пойти следующим образом:

step1- в контроллере, в «новом» действии, создать экземпляр@property object as:

@property = Property.new(:agency_id => params[:agency_id]) # this will have agency association from beginning

step2- в _form.html.erb используйте это:

form_for (@property.agency,@property)

этот код должен работать наверняка (я часто его использую), незнать, есть ли более чистое / менее уродливое решение;)

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