私はRubyが初めてで、OTJを学んでいます。私は何日もこの問題に取り組んでおり、has_many :through パターンに関する他の多くの投稿を読みました。
MySQL で RubyMine 5.4 と ruby-1.9.3-p194 を使用しています
3 つのモデルがあり、ネストされた関係を追加、削除、編集できる必要があります。
アイデアは、どのユーザーも多くのビジネス競合グループを持つことができるということです。グループ (同じ group_id を持つ) には 1 つのターゲット競合者があり、それは競合です。各競合他社は、関連する属性を持つ BizEntity です。各競技者は、さまざまな競技グループのメンバーになることができます。
ユーザーを選択してから、ユーザーグループと関連する競合他社を表示/編集できるように、多対多を機能させようとしています。
モデルで RubyMine の Inspect Code を実行しましたが、クリーンです。それでも、Rails モデルの依存関係図 (両端に ? がある赤い線) は、ユーザーと BizEntity の関係に問題があることを示しています。
どんな援助でも大歓迎です。
ありがとう!
モデルは次のとおりです。
class User < ActiveRecord::Base
has_secure_password
attr_accessible :email, :password_digest
validates_uniqueness_of :email
has_many :competitive_insightses, :class_name => 'CompetitiveInsights'
has_many :biz_entitieses, :through => :competitive_insightses, :class_name => 'CompetitiveInsights', :source => :biz_entities
end
class CompetitiveInsights < ActiveRecord::Base
attr_accessible :biz_entity_id, :user_id, :group_id, :position, :target
belongs_to :user
belongs_to :biz_entities
end
class BizEntities < ActiveRecord::Base
attr_accessible :name, :ticker
accepts_nested_attributes_for :users
has_many :competitive_insightses, :class_name => 'CompetitiveInsights'
has_many :users, :through => :competitive_insightses, :class_name => 'CompetitiveInsights'
end
私のコントローラーでは、コメントされた2行が同じタイプのエラー「nil:NilClassの未定義メソッド「biz_entities」」を引き起こします
class CompetitiveInsightsController < ApplicationController
def index
@my_companies = CompetitiveInsights.find_all_by_user_id(current_user)
#competitive_insights = current_user.competitive_insightses
#biz_entitieses = current_user.biz_entitieses
if (@my_companies.nil?)
@my_companies = CompetitiveInsights.new(current_user)
@my_companies.save!
end
end
end
edit.html.erb はまだ biz_entity フィールドを編集できず、次のエラーがスローされます。
"未定義のメソッド `competitive_insight_competitive_insight_path' for #<#:0x007fc1fae4efd0>"
<%= form_for @my_companies do |f| %>
<div class="field">
<%= f.label :group_id %><br />
<%= f.text_field :group_id %>
</div>
<%= f.fields_for :biz_entities do |biz_entity| %>
<div class="field">
<%= biz_entity.label :ticker %><br />
<%= biz_entity.text_field :ticker %>
</div>
<% end %>
<div class="actions"><%= f.submit %></div>
<% end %>