Rails 3.1.1 полиморфное представление вложенной формы не работает - отлично работает в Rails 3.0.10 - PullRequest
1 голос
/ 03 ноября 2011

Так что, возможно, я обнаружил ошибку в Rails 3.1.1, или я не понимаю, изменился ли Rails 3.1 (.1) каким-то образом по сравнению с Rails 3.0.10 с вложенными ресурсами, полиморфными ассоциациями и /или маршрутизация ...

Под Rails 3.0.10 следующее работает нормально, но под Rails 3.1.1 это не так!

Это мои модели:

class Picture < ActiveRecord::Base
  belongs_to :imageable, :polymorphic => true
end

class Employee < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

class Product < ActiveRecord::Base
  has_many :pictures, :as => :imageable
end

Мои маршруты.рб:

resources :employees do
  resources :pictures
end
resources :products do
  resources :pictures
end

Мой контроллер:

class PicturesController < ApplicationController
  def index
    @imageable = find_imageable
    @pictures = @imageable.pictures
  end

  private
  def find_imageable
    params.each do |name, value|
      if name =~ /(.+)_id$/
        return $1.classify.constantize.find(value)
      end
    end
    nil
  end
end

Мое приложение / views / pictures / index.html.erb:

<% form_for [@imageable, Picture.new] do |f| %>
    <p><%= f.submit "Add picture" %></p>
<% end %>

Я сгенерировал приложения с помощью rails new poly -T (для Rails 3.1.1 и Rails 3.0.10).

Я использовал стандартные команды скаффолда: rails g scaffold Employee name:string, rails g scaffold Product title:string и rails g scaffold Picture caption:string imageable_id:integer imageable_type:string, а затем перенес изКонечно.

При нажатии на индексную форму (/ сотрудники сначала создают сотрудника с id == 1; затем / employee / 1 / pictures) я получаю пустую форму (кнопка не появляется) в Rails 3.1.1и форма с кнопкой отправки на Rails 3.0.10 ...

Любые идеи, если я делаю что-то не так в Rails 3.1.1, или я действительнонашел ошибку (сомневаюсьэто - я уверен, что я делаю что-то глупое!)?

1 Ответ

3 голосов
/ 03 ноября 2011

В строке:

<% form_for [@imageable, Picture.new] do |f| %>

Вы пропускаете = после <%. Строка должна быть

#notice the = symbol:
<%= form_for [@imageable, Picture.new] do |f| %>

Синтаксис более старого стиля <% для form_for, field_for и т. Д. Устарел и планируется удалить в 3.1, если я правильно помню.

...