Так что, возможно, я нашел ошибку в 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
Мои маршруты.rb:
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
Мое приложение/представления/картинки/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
, а затем, конечно, мигрировал.
При нажатии на индексную форму (сначала /employees для создания сотрудника с идентификатором == 1; затем /employees/1/pictures) я получаю пустую форму (кнопка не появляется) на Rails 3.1.1 и форму с кнопку отправки на нем, в Rails 3.0.10...
Есть идеи, что я делаю что-то не так в Rails 3.1.1, или я действительно нашел ошибку (я сомневаюсь в этом - я уверен, что делаю что-то глупое!)?