在rails应用程序中查找ruby中的变量

时间:2012-11-19 22:40:57

标签: ruby-on-rails variables associations

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

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

我尝试了一些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'

所以,感谢@bravenewweb提供帮助......但仍有一些问题:

我想我发现了问题,但我不确定如何解决它。

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

推荐人现在在Heroku存在,但没有任何数据。而且我不确定如何把它放在那里。

我认为问题是Production db是SQLite,即使它只能用于开发和测试。那么如何让生产数据库与Heroku交流?

请帮忙!

3 个答案:

答案 0 :(得分:2)

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

@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)

答案 1 :(得分: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)。或许我错过了什么?

答案 2 :(得分:1)

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