1

我是 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 %>
4

0 回答 0