0

私は実行時にディーゼルフィルターを生成しています(この質問と同様のアプローチを使用しています)。make_filtersテーブルのフィルターを生成する関数がありますtunnel:

fn make_filters() -> Vec<Box<dyn BoxableExpression<tunnel::table, Pg, SqlType = Bool>>>

tunnelこれらのフィルターをテーブルまたは と の結合のいずれかに適用したいと思いtunnelますconnection。このような:

let mut query = tunnel::table.left_join(connection::table).into_boxed();

for filter in filters.as_sql_where() {
    query = query.filter(filter);
}

しかし、試してみると、次のエラーが発生します。

^^^ the trait 
`diesel::AppearsOnTable<diesel::query_source::joins::JoinOn<diesel::query_source::joins::Join<tunnel::table, connection::table, diesel::query_source::joins::LeftOuter>, diesel::expression::operators::Eq<diesel::expression::nullable::Nullable<connection::columns::tunnel_id>, diesel::expression::nullable::Nullable<tunnel::columns::id>>>>` 

is not implemented for `dyn diesel::BoxableExpression<tunnel::table, diesel::pg::Pg, SqlType = diesel::sql_types::Bool>`

クエリが だけtunnel::table.into_boxed()の場合、これはうまく機能するので、 の型シグネチャを一般化する必要があると思いますmake_filters

ここでの最小限の例。

4

1 に答える 1