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