【问题标题】:Active Record Querying belong_toActive Record 查询belong_to
【发布时间】:2011-07-09 06:18:05
【问题描述】:

我关联了以下两个模型:

class Post < ActiveRecord::Base
  belongs_to :language
end

class Language < ActiveRecord::Base
  has_many :posts
end

从一个视图来看,我有一个按语言过滤帖子的链接:

<div id="english"><%= link_to "English", {:controller => 'posts', :action => 'search_result', :language => "english"} %></div>

模型语言有一个变量名:字符串,这是我用来进行活动记录查询的。

我的疑问是如何从 post 控制器进行此查询以检索具有以下字段的正确帖子:language.name == "english"。

我试过这个:

@posts = Post.all(:conditions => ["language.name = ?", params[:language]])

还有这个:

@posts = Post.where(:language.name => params[:language])

希望我已经很好地解释了这个问题,我还是个新手。啊!我也知道在这种情况下使用什么会更好:“全部”或“哪里”?? 提前非常感谢。

【问题讨论】:

    标签: ruby-on-rails-3 activerecord associations


    【解决方案1】:

    你需要加入:http://guides.rubyonrails.org/active_record_querying.html#specifying-conditions-on-the-joined-tables

    如果我正确理解了您的模型/数据库结构,则 ActiveRecord 调用应该类似于:

    Post.joins(:language).where('languages.name' => params[:language])
    

    希望对您有所帮助。

    附言。 where 调用是这些天的首选方法。

    【讨论】:

    • 对不起,我编辑了这个问题,因为我把西班牙语和英语搞砸了,我写成语的地方应该有书面语言。我尝试加入,但仍然没有运气。模型 Post 属于 Language,Language 有一个名为 name 的字段。所以我尝试了 Post.joins(:language).where('language.name' => params[:language]) 但它给了我一个错误:SQLite3::SQLException: no such column:language.name。也许令人困惑的是一种语言有很多帖子而不是相反..我会继续努力!感谢您的回答..我应该使用连接来让它工作。
    • 在where子句中需要使用实际的表名,所以应该试试:Post.joins(:language).where('languages.name' =&gt; params[:language])
    • @salt.racer @Adnan:不,它不起作用,我已经尝试过了,我得到了:SQLite3::SQLException: no such column: language.name: SELECT "posts".* FROM "posts" INNER JOIN "languages" ON "languages"."id" = "posts"."language_id" WHERE "language"."name" = 'english'... 如果 Post has_many 语言(我检查过它)但如果 Post belongs_to Language 则不会。仍然坚持这个,有什么想法吗?谢谢!
    • 好的,我有一个类似的模型,我已经成功使用了这个(我正在为你更改模型名称):Post.joins(:language).where(:languages =&gt; {:name =&gt; params[:language]})你可以试试吗?
    • 两者确实是等价的。我更喜欢第二条评论中的方法,因为它在视觉上将应用于联接表的条件与应用于父表的条件分开。看起来更干净(无论如何对我来说)。很高兴能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多