Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord::RecordNotFound-在子类中';关联的#控制器#索引_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails ActiveRecord::RecordNotFound-在子类中';关联的#控制器#索引

Ruby on rails ActiveRecord::RecordNotFound-在子类中';关联的#控制器#索引,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我试图在嵌套控制器中定位父对象,以便可以将子体资源与父对象关联,如下所示: # teams_controller.rb <snippet only> def index @university = Univeresity.find(params[:university_id]) @teams = @university.teams end team.rb class Team < ActiveRecord::Base attr_accessible :name,

我试图在嵌套控制器中定位父对象,以便可以将子体资源与父对象关联,如下所示:

# teams_controller.rb <snippet only>

def index
  @university = Univeresity.find(params[:university_id])
  @teams = @university.teams
end
team.rb

class Team < ActiveRecord::Base
  attr_accessible :name, :sport_type, :university_id

  has_many :home_events, foreign_key: :home_team_id, class_name: 'Event'
  has_many :away_events, foreign_key: :away_team_id, class_name: 'Event'
  has_many :medias, as: :mediable
  belongs_to :university

  validates_presence_of :name, :sport_type

  # scope :by_university, ->(university_id) { where(team_id: team_id).order(name: name) }
  # scope :find_team, -> { Team.find_by id: id }
  # scope :by_sport_type, ->(sport_type) { Team.where(sport_type: sport_type) }
  # scope :with_university, joins: :teams 
  # def self.by_university(university_id)
  #   University.where(id: 1)
  #   University.joins(:teams).where(teams: { name: name })
  # end

  def self.by_university
    University.where(university_id: university_id).first
  end

  def self.university_join
    University.joins(:teams)
  end

  def self.by_sport_type(sport_type)
    where(sport_type: sport_type)
  end

  def self.baseball
    by_sport_type('Baseball/Softball')
  end
end
class团队(大学id){其中(团队id:team id).order(姓名)}
#作用域:find_team,->{team.find_by id:id}
#经营范围:按运动类型,->(运动类型){团队。其中(运动类型:运动类型)}
#经营范围:与_大学合作,加入::团队
#大学自我定义(大学id)
#大学。在哪里(id:1)
#University.joins(:teams).where(teams:{name:name})
#结束
迪夫大学
大学。在哪里(大学id:大学id)。第一
结束
def self.university\u加入
大学。加入(:团队)
结束
按运动类型定义自我(运动类型)
其中(运动型:运动型)
结束
棒球
按运动类型(“棒球/垒球”)
结束
结束
university.rb

  class University < ActiveRecord::Base
  attr_accessible :address, :city, :name, :state, :url, :zip

  has_many :teams, dependent: :destroy

  validates :zip, presence: true, format: { with: /\A\d{5}(-\d+)?\z/ },
            length: { minimum: 5 }
  validates_presence_of :name, :address, :city, :state, :url

  scope :universities, -> { University.order(name: 'ASC') }
  # scope :by_teams, ->(university_id) { Team.find_by_university_id(university_id) }
  # scope :team_by_university, ->(team_id) { where(team_id: team_id).order(name: name)}

  def sport_type
    team.sport_type
  end
end
classuniversity{University.order(名称:'ASC')}
#范围:由大学团队,->(大学id){Team.find_由大学id(大学id)}
#经营范围:大学队,->(队号){其中(队号:队号)。订单(姓名)}
def运动型
团队运动型
结束
结束
views/teams/index.html.erb

rake路由输出:(在公共gist中)

轨道控制台

您不想同时拥有这两个:

resources :universities  #lose this one

resources :universities do 
  resources :teams 
end
至于参数。。。你必须给出一个参数。因此,当您转到
http://localhost:3000/teams
默认情况下没有参数。如果您转到
http://localhost:3000/teams/3
然后
params[:id]=3
这将拉起你的第三个团队

记住索引的命名法。团队的索引操作将列出所有团队。都是。那里没有一所大学,所以你到底想找什么?如果有的话,你应该为你的大学管理员:

def show
  @university = University.find(params[:id])
  @teams = @university.teams
end

因此,地址栏将显示
http://localhost:3000/universities/23
,对吗?params[:id]=23,然后您可以找到与该大学关联的团队。

您没有在
params[:university\u id]
中提供大学id,因此
university.find(params[:university\u id])
university.find(nil)
,因此出现错误。通常情况下,如果你想按大学范围划分团队,你会在你的路线中将团队嵌套在大学内,给你一条类似于
/universions/12/teams
的路线。我没想到,问题末尾附加了routes.rb。您好,Sevensacat,我唯一的想法是我会传递params[:id]。当我编辑University.find(params[:University\u id]到University.find(params[:id]时错误仍然存在。有什么想法吗?你也没有提供params[:id]。对不起,我不明白你不提供params[:id]或params[:University\u id]是什么意思。我已经包括了一个显示团队和大学参数的控制台图像。我肯定我遗漏了一些愚蠢的东西,但我不知所措。任何进一步的解释都非常感谢。作者引用了路径
university\u teams GET/universions/:university\u id/teams(:format)
,因此确实
params[:university\u id]
应该使用。感谢Mallanaga对“团队/索引”的描述,这很有意义。
def show
  @university = University.find(params[:id])
  @teams = @university.teams
end