私は少し Rails 初心者なので、これが私の側の明らかな間違いである場合は申し訳ありません。各画像インスタンスがカテゴリと「has_and_belongs_to_many」の関係を持ち、その逆の2つのモデル、画像とカテゴリの関連付けを作成しようとしています。各画像を複数のカテゴリに添付できるようにするチェック ボックスとして画像アップロード フォームに表示されるカテゴリを取得したいのですが、このエラーが発生し続けます。
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
カテゴリー.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
class 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 %>