我是 Ruby 新手,正在学习 OTJ。几天来我一直在研究这个问题,并阅读了很多关于 has_many :through 模式的其他帖子。
我正在使用 RubyMine 5.4 和 ruby-1.9.3-p194 和 MySQL
我有三个模型,我需要能够添加、删除和编辑嵌套关系:
这个想法是任何用户都可以拥有许多业务竞争对手组。一个组(具有相同的 group_id)有一个目标竞争对手,它是竞争对手。每个竞争对手都是具有相关属性的 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
在我的控制器中,两个注释行导致相同类型的错误“未定义的方法 `biz_entitieses' for nil:NilClass”
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 字段并引发以下错误:
“#<#:0x007fc1fae4efd0> 的未定义方法 `competitive_insight_competitive_insight_path'”
<%= 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 %>