1

2 つのテーブルがあります。1 つは style と呼ばれ、5 つの属性 (および id と created_at) があり、もう 1 つは recommender と呼ばれ、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' #

だから、助けてくれた@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 = 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 に答える