そのため、私たちに役立つ情報を長く懸命に探した結果、協力できる答えを見つけるのが難しいことがわかりました.
問題は、Schools and Organizations という HABTM リレーションシップを介して結合された 2 つのテーブルがあることです。最初に学校が作成され、次に Organization が学校のリストを取得し、ユーザーが 1 つを選択できるようにしてから、3 番目のテーブル OrganizationsSchools に school_id と organization_id の両方を入力します。
3 つのモデルは次のとおりです。 学校モデル:
class School < ActiveRecord::Base
has_and_belongs_to_many :organizations, :join_table => 'organizations_schools'
attr_accessible :name
validates :name, :presence => true
end
組織モデル:
class Organization < ActiveRecord::Base
has_many :materials
has_many :users
has_and_belongs_to_many :causes
has_and_belongs_to_many :schools, :join_table => 'organizations_schools'
attr_accessible :name, :unlogged_books_num, :id
validates :name, :presence => true
end
組織のフォーム:
<%= form_for(@organization) do |f| %>
<% if @organization.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@organization.errors.count, "error") %> prohibited this organization from being saved:</h2>
<ul>
<% @organization.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<% @schools = School.all %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :unlogged_books_num %><br />
<%= f.number_field :unlogged_books_num %>
</div>
<div class="field">
<%= f.label 'School' %><br />
<% school_id = nil %>
<%= collection_select(nil, school_id, @schools, :id, :name) %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
最後に、Organizations コントローラーの create 関数
class OrganizationsController < ApplicationController
.
.
.
def create
@organization = Organization.new(params[:organization])
org_id = @organization.id
school_id = @organization.school_id
@org_school = OrganizationsSchool.create(:organization_id => org_id, :school_id => school_id)
respond_to do |format|
if @organization.save
format.html { redirect_to @organization, notice: 'Organization was successfully created.' }
format.json { render json: @organization, status: :created, location: @organization }
else
format.html { render action: "new" }
format.json { render json: @organization.errors, status: :unprocessable_entity }
end
end
end
end
コントローラーの他のすべての関数は、安らかに作成されます。また、私はデータベースに精通しているわけではありません。また、Rails についてはよく知っていますが、それを使いこなすことはまったく得意ではありません。