Rails 3.1.1 не работает представление полиморфной вложенной формы — отлично работает в Rails 3.0.10

#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1 #nested-forms #polymorphic-associations

#ruby-on-rails #ruby-on-rails-3 #ruby-on-rails-3.1 #вложенные формы #полиморфные ассоциации

Вопрос:

Так что, возможно, я нашел ошибку в 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
  

Мое приложение / 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).

Я использовал стандартные команды scaffold: 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 для создания сотрудника с id == 1; затем /employees/1/pictures) Я получаю пустую форму (кнопка не отображается) на Rails 3.1.1 и форму с кнопкой отправки на ней, на Rails 3.0.10…

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

Ответ №1:

В строке:

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

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

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

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

Комментарии:

1. И добро пожаловать в SO. Если ответ вам подходит, вы можете пометить его как принятый, нажав на галочку! И голосование за него тоже.

2. Ого! Конечно же. Спасибо Zabba.