This line that specifies the database table name that corresponds to my Dog
struct gives the error "use of undeclared crate or module dogs
". If I remove that line then I get the same error on the pub struct Dog
line. I'm not sure how to fix this. My goal is to get the insert_dog
method in main.rs
to work.
https://github.com/mvolkmann/rust-diesel-demo/blob/master/src/models.rs#L1
Add this to the file where the error occurs:
use crate::schema::dogs;
That definitely helped! I'm making progress. My next issue is in trying to retrieve all the rows from my "dogs" table. See here: https://github.com/mvolkmann/rust-diesel-demo/blob/master/src/bin/main.rs#L39
The compiler also does not like the connection I'm passing to the load
method. It says "the trait diesel::Connection
is not implemented for &diesel::PgConnection
".
Is it correct that I need to define one struct for dogs that will be retrieved and another that omits the id
field for inserting dogs as shown here? https://github.com/mvolkmann/rust-diesel-demo/blob/master/src/models.rs#L3
The compiler tells you how to fix this. conn
is already a reference, so you don't need to take a reference to it:
--> src/bin/main.rs:39:22
|
39 | .load::<Dog>(&conn)
| -^^^^
| |
| the trait `diesel::Connection` is not implemented for `&diesel::PgConnection`
| help: consider removing the leading `&`-reference
If you want to retrieve the entire row, you don't need a select
clause. Try this:
let results = dogs::dsl::dogs
.load::<Dog>(conn)
.expect("error loading dogs");
If you want to retrieve only a few columns, you can use a select
like this:
let results = dogs::dsl::dogs
.select((dogs::name, dogs::breed))
.load::<(String, String)>(conn)
.expect("error loading dogs");
for (name, breed) in results {
println!("{} is a {}.", name, breed);
}
You can also do something like this:
diesel::insert_into(dogs::table)
.values((dogs::name.eq(name), dogs::breed.eq(breed)))
.execute(conn)
Thanks so much! I need to get better about seeing the suggestions in the compiler messages. The errors come out in red and really catch my attention. The suggestions come out in a kind of dim blue and I sometimes overlook them.
This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.