添加关联模型的表单复选框时出现“未定义的方法`关联'”错误

时间:2013-11-02 16:33:08

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我有点像Rails noob,很抱歉,如果这是我的一个明显的错误。 我正在尝试创建一个关联两个模型,图像和类别,其中每个图像实例与类别具有'has_and_belongs_to_many'关系,反之亦然。我希望在图像上传表单中显示类别作为复选框,以允许每个图像附加到多个类别,但不断收到此错误:

undefined method `association' for #<ActionView::Helpers::FormBuilder:0x000001011cf370>

我已经坚持了大约2天,并检查了所有其他帖子看起来像一个类似的问题以及谷歌搜索,尝试各种教程,并从头开始几次。到目前为止,没有任何工作可行,而且我有点死路一条。这就是我现在所拥有的。类别和图像模型可以自行工作,据我所知,categories_images迁移也很好。我检查了表格,可以从控制台和GUI中将数据插入图像和类别中。一切正常但只是无法解释为什么表单在我尝试建立关联时抛出此错误。对此的任何帮助都非常感谢!

这是我现在所拥有的。我在Rails 3.2.11和Ruby 1.9.3上,如果有任何帮助的话!

Image.rb

class Image < ActiveRecord::Base
 attr_accessible :description, :name
 has_and_belongs_to_many :categories
 accepts_nested_attributes_for :categories

end

Category.rb

class Category < ActiveRecord::Base
  attr_accessible :name
  validates_presence_of :name
  has_and_belongs_to_many :images
end

categories_images.rb

class CategoriesImages < ActiveRecord::Migration
  def change
  create_table :categories_images do |t|
   t.integer :category_id
   t.integer :image_id
  end
  add_index :categories_images, [:category_id,:image_id]
 end
end

create_images.rb

类CreateImages&lt; ActiveRecord的::迁移

  def change
    create_table :images do |t|
      t.string :name
      t.text :description

      t.timestamps
    end
   end
  end

create_categories.rb

class CreateCategories < ActiveRecord::Migration
  def change
    create_table :categories do |t|
      t.string :name

      t.timestamps
    end
  end
end

这是图片上传表格(减去目前的任何文件上传功能),其中“f.association”行似乎是突出显示的问题。

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

      <ul>
      <% @image.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </div>
**<%= f.association :categories, :as => :checkboxes %>**
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

1 个答案:

答案 0 :(得分:1)

错误表示“关联”不是可用的方法。是否像simple_form一样依赖于gem?你包括这个吗?