Rails 3.1.1多态嵌套表单视图不起作用 - 在Rails 3.0.10中正常工作

时间:2011-11-03 02:12:34

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 nested-forms polymorphic-associations

所以也许我在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

我的routes.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

我的app / 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:stringrails g scaffold Product title:stringrails g scaffold Picture caption:string imageable_id:integer imageable_type:string然后进行迁移。

当点击索引表单时(/ employee首先创建一个id == 1的员工;然后是/ employees / 1 / pictures)我在Rails 3.1.1上得到一个空白表单(没有按钮出现)和一个表单< em> with 上面的提交按钮,在Rails 3.0.10 ...

任何想法,如果我在Rails 3.1.1中做错了,或者我真的发现了一个错误(我怀疑它 - 我确定我做了一些愚蠢的事情!)?

1 个答案:

答案 0 :(得分:3)

在行中:

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

=之后您遗漏了<%。该行应

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

如果我没记错的话,<%form_for等旧格式field_for语法已被弃用并计划在3.1中删除。