1

我有两个表:一个称为样式,它有 5 个属性(加上 id 和 created_at),另一个称为推荐器,它有 6 个属性(加上 id 和 created_at)。

在 Styles 表上定义了 5 个属性后,我希望能够显示推荐表中的条目,该条目具有与样式表中的属性匹配的 5 个属性。

我尝试了几种 Model.find 和 Model.where 的组合来获得它,但似乎没有任何效果。

这是styles_controller.rb

def show
@style = Style.find(params[:id])
bt = @style.bodytype
n = @style.need
t = @style.texture
c = @style.color
st = @style.statement   
@recommender =  Recommender.with_bodytype(params[:bt]).with_need(params[:n]).with_texture(params[:t]).with_color(params[:c]).with_statement(params[:st])
respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @style }
 end
end

我得到的消息是:未定义的方法 `with_bodytype' for #

所以,感谢@bravenewweb 的帮助......但仍然存在一些问题:

我想我找到了问题所在,但我不知道如何解决它。

生产环境有 Recommender 及其所有数据(我把它放在那里),开发也是如此。

Recommender 现在存在于 Heroku,但没有任何数据。我不知道如何把它放在那里。

我认为问题在于生产数据库是 SQLite,即使它只应该在开发和测试中工作。那么如何让生产数据库与 Heroku 对话呢?

请帮忙!

4

3 回答 3

2

它应该比这容易得多,ActiveRecord 的 find 方法默认会返回匹配的第一条记录。您要做的是将属性名称与 and 链接,然后使用与方法名称相同的顺序传递查询属性

@recommender = Recommender.find_by_bodytype_and_need_and_texture_and_color_and_statement(bt, n, t, c, st)

如果你想找到所有匹配这些参数的记录,你只需要开始它

@recommender = Recommender.find_all_by_bodytype_and_need_and_texture_and_color_and_statement(bt, n, t, c, st)
于 2012-11-20T05:36:52.293 回答
1

我不熟悉这些.with_<attribute>方法(它们存在吗?),但听起来你想要一个简单的 where 子句。如果我理解正确,您希望找到所有共享所选样式属性的推荐者。所以像

@recommender = Recommender.where("bodytype = :bodytype AND need = :need AND texture = :texture AND color = :color AND statement = :statement", [:bodytype => @style.bodytype, :need => @style.need, :texture = @style.texture, :color => @style.color, :statement => @style.statement]).first

你也可以使用?每个命名的占位符,但是当你有很多条件时,这会更清楚一点。

另外,这可能不是一种show方法,它更像是index因为查询可以返回多个结果,对吧?如果是这样,也许您的实例变量应该是复数 ( @recommenders)。或者,也许我错过了什么?

于 2012-11-19T22:53:48.730 回答
1

如果您希望样式与推荐者唯一关联,则可以将组合键作为 [bodytype, need, texture, color, statement] 的 has_one 关联。

于 2012-11-19T23:17:33.790 回答