gpt4 book ai didi

ruby-on-rails - Rails find_by 和模型外键

转载 作者:行者123 更新时间:2023-12-04 12:26:42 25 4
gpt4 key购买 nike

这些天我正在研究 Ruby on Rails 以提高自己作为开发人员的水平,因此我开始重写我的一个 php 网站以使用该框架。
该网站基本上是一个源代码聚合器,因此我有一个语言模型和一个源模型:

class Language < ActiveRecord::Base
has_many :sources
end

class Source < ActiveRecord::Base
belongs_to :language
end

与源表中的language_id外键绑定(bind)。
该网站的主要路线之一是:

get ':language_name/:source_name.html' => 'source#show'

例如:

/ruby/discover-if-a-number-is-prime.html

在 SourceController 中,我声明了以下内容:

class SourceController < ApplicationController
def show
language_name, source_name = params[:language_name], params[:source_name]
@language = Language.find_by_name(language_name) || not_found
@source = Source.find_by( name: source_name, language_id: @language.id ) || not_found
end
end

有没有一种巧妙的方法来执行这两个查询?
也许像

@source = Source.find_by_name_and_language_name( source_name, language_name ) || not_found

如果这是一个愚蠢的问题,我很抱歉,我也在阅读《使用 Rails 3.2 进行敏捷 Web 开发》,但与此同时我想尝试一下。
谢谢

最佳答案

从对 Marek 的回答的评论中询问,可以使用 joins 仅使用 1 个查询

@source = Source
.joins(:language)
.where(languages: { name: language_name })
.where(sources: { name: source_name })
.first

这将返回第一个匹配 source_name 且其语言匹配 language_namesource

关于ruby-on-rails - Rails find_by 和模型外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com