我有两个表:一个叫做样式,有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交流?
请帮忙!
答案 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]。