これで頭を叩いて、私は似たようなことを尋ねましたが、それでどこにも行きません。つまり、スーパーヒーロー、パワー、チームの3つのテーブルがあります。スーパーヒーローは多くの力と多くのチームを持つことができ、力は多くのスーパーヒーローに関係することができ、チームは多くのスーパーヒーローで構成されます。私はこれらを大きな関係テーブル(私はマーベルと呼んでいます)に保存することにしました
これが私が設定したものです:
class Superhero < ActiveRecord::Base
attr_accessible :name, :power_ids, :team_ids, :attributes_marvels
has_many :marvels, :dependent => :destroy
has_many :powers, :through => :marvels
has_many :teams, :through => :marvels
accepts_nested_attributes_for :marvels
end
class Power < ActiveRecord::Base
attr_accessible :name
has_many :marvels, :dependent => :destroy
end
class Team < ActiveRecord::Base
attr_accessible :name
has_many :marvels, :dependent => :destroy
end
class Marvel < ActiveRecord::Base
attr_accessible :power_id, :superhero_id, :team_id
belongs_to :superhero
belongs_to :power
belongs_to :team
end
スーパーヒーローを作成するためのフォームは次のとおりです。
<%= form_for(@superhero) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<p>Please select which team you work for:</p>
<%= f.collection_select(:team_ids, Team.all(:order=>:name), :id, :name, {:prompt => true}) %>
</div>
<div class="field">
<p>Please check all powers that apply to you.</p>
<% Power.all.each do |power| %>
<label class="checkbox">
<%= check_box_tag "superhero[power_ids][]", power.id, @superhero.power_ids.include?(power.id) %>
<%= power.name %>
</label>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
スーパーヒーローのコントローラー
def new
@superhero = Superhero.new
end
def create
@superhero = Superhero.new(params[:superhero])
end
この方法で作成したのは、(チェックボックス)パワーのリスト、(ドロップダウン)チームのリスト、これらの基準に基づいたスーパーヒーローのリストを表示できるようにするためです。
私はこれをほぼ機能させていますが、保存に問題があり、ロガーファイルでこれを与えていることに気づきました:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"sgD0NIjDM8QhMdzSsb7M/+PFd+FxMtNeOGukrdw9qFA=", "superhero"=>{"name"=>"Storm", "team_ids"=>"3", "power_ids"=>["1"]}, "commit"=>"Create Superhero"}
INSERT INTO "superheros" ("created_at", "name", "updated_at") VALUES (?, ?, ?) [["created_at", Thu, 07 Feb 2013 19:59:24 UTC +00:00], ["name", "Storm"], ["updated_at", Thu, 07 Feb 2013 19:59:24 UTC +00:00]]
INSERT INTO "marvels" ("created_at", "power_id", "superhero_id", "team_id", "updated_at") VALUES (?, ?, ?, ?, ?)[0m [["created_at", Thu, 07 Feb 2013 19:59:24 UTC +00:00], ["power_id", nil], ["superhero_id", 8], ["team_id", 3], ["updated_at", Thu, 07 Feb 2013 19:59:24 UTC +00:00]]
INSERT INTO "marvels" ("created_at", "power_id", "superhero_id", "team_id", "updated_at") VALUES (?, ?, ?, ?, ?) [["created_at", Thu, 07 Feb 2013 19:59:24 UTC +00:00], ["power_id", 1], ["superhero_id", 8], ["team_id", nil], ["updated_at", Thu, 07 Feb 2013 19:59:24 UTC +00:00]]
なぜ2回挿入するのですか?また、パラメーターの値をはっきりと確認できるのにNil値があるのはなぜですか?