如果这是我的一个明显错误,我有点像 Rails 菜鸟,很抱歉。我正在尝试创建两个模型图像和类别的关联,其中每个图像实例与类别具有“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 上!
图片.rb
class Image < ActiveRecord::Base
attr_accessible :description, :name
has_and_belongs_to_many :categories
accepts_nested_attributes_for :categories
end
类别.rb
class Category < ActiveRecord::Base
attr_accessible :name
validates_presence_of :name
has_and_belongs_to_many :images
end
类别图像.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 < ActiveRecord::Migration
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 %>