Chris Oliver

Joined

291,480 Experience
86 Lessons Completed
296 Questions Solved

Activity

Posted in Custom Validations Issue

Probably the same issue.

Remember that count, size, and length in ActiveRecord are all different. Count always queries the database if I remember right. Size uses the counter cache if it can, but will count the in-memory items if they're loaded. Length always counts them in Ruby in-memory.

You probably want to use either size or length there to make sure you're counting the Ruby array, not the db query. (It would also probably be good to comment these nuances alongside the code so when this changes in the future you remember why you did these seemingly weird things.)

Reference:
https://mensfeld.pl/2014/09/activerecord-count-vs-length-vs-size-and-what-will-happen-if-you-use-it-the-way-you-shouldnt/

Posted in Bundle Package and Deployment

I think you need to use Capistrano's rake helper. Try replacing your execute line with:

        with rails_env: "#{fetch(:stage)}" do
          execute :rake, "db:create"
        end

They have a bunch of docs, but there's some details on the nuances here: https://capistranorb.com/documentation/getting-started/tasks/

Posted in Custom Validations Issue

Hey Thomas,

The main issue here is your default_site method I believe. Here's the problem:

Your default_site method issues a database query.

When your form submits, you actually are modifying the record (and nested records) in memory. When your validation runs, it needs to check against the in-memory nested records that you're submitting, not the ones in the database.

class UserValidator < ActiveModel::Validator
  def validate(record)
    if record.sites.count < 1
      record.errors.add(:site, "must have at least one site available")
    end

    if record.sites_users.select{ |su| su.is_default }.count != 1
      record.errors.add(:site, "must have exactly one site selected as default")
    end
  end
end

Changing it to this will do a check against the sites_users in-memory. You can leave your database query for default site as it does some extra loading for performance elsewhere I'm assuming.

Posted in Bundle Package and Deployment

Hey Philip,

Capistrano just runs bundle on the server. You can see it in the logs.

Gems can be installed in different folders, and Capistrano will cache the gems in a shared bundle folder in your repo's folder on the server. It can also load gems from outside that like the vendor folder or gems installed on the user or system level.

For some reason, I'm getting the same issue with Capistrano. If I add a new gem, it'll run the bundle command but it won't be installed on the server. I don't know why that is. It's caused GoRails to crash a couple times because of that.

We probably need to poke around the issues on Github to see if there's anyone else mentioning the issue: https://github.com/capistrano/bundler.

Also on the server, your gems won't necessarily be in your PATH, so you may have to run bundle exec rails c to run the Rails console.

Posted in Nested Comment Threads in Rails - Part 1 Discussion

I'd just throw some console.logs into your JS and see what's getting called and what's not. Then you can figure out what you are missing.

Hey Sebastian,

Your error is:

/home/deploy/apps/Blogapp/shared/bundle/ruby/2.5.0/bin/rake: No such file or directory - java

So maybe you have a dependency that needs Java installed. It looks like it's required for Yui compressor.

Make sure Java is installed on your server.

Posted in Nested Comment Threads in Rails - Part 1 Discussion

It looks like you spelled polymorphic wrong which might be why it threw that error.

Posted in Stripe payments course getting out of date

Yep, I'm working on a whole new version. Also going to include a shopping cart example!

I've been waiting a little bit to make sure that I cover any new API changes that they are making. I'm going to start recording the new version this week so it should be out shortly.

If only APIs didn't change... 😜

Posted in JSON Web Tokens with Devise & Warden Discussion

If I remember right, you call sign_in instead of success!.

Posted in Nested Comment Threads in Rails - Part 1 Discussion

I can cover that in a follow-up episode. 👍

Posted in How do I query a model with a value less than

@jacob 👍

That would make sense since you use ORDER to sort in SQL.

I guess you could modify the code to be the following to specify the column and clarify it for the db that you're not using the ORDER keyword.

Lesson.where("lessons.order < ?" , 8)

I'd much rather rename the column though.

Posted in Anyone here built an iOS app with ROR backends.

Depends on what you know more. React Native let's you build with React, HTML, and CSS for any native features. Turbolinks will require you to write a lot of Swift or Java to do anything native.

Posted in Anyone here built an iOS app with ROR backends.

Just gonna drop this here. I built a series using Rails and React Native iOS. https://gorails.com/series/oauth-api-authentication

Posted in API Authentication with an OAuth Provider Discussion

Check the 3rd line there:

Access to admin panel is forbidden due to Doorkeeper.configure.admin_authenticator being unconfigured.

Posted in API Authentication with an OAuth Provider Discussion

That route comes from the doorkeeper gem, so if it's blank, then your installation may not be done right.

This is the episode on the Rails template: https://gorails.com/episodes/rails-application-templates

Posted in API Authentication with an OAuth Provider Discussion

Hey Jeremy,

Like I mentioned at the beginning, we're using the Jumpstart template that I made. https://github.com/excid3/jumpstart

I'm not gonna waste your time installing Devise and Bootstrap every episode, so I made the Rails Jumpstart template for that. 👍

Posted in Nested Comment Threads in Rails - Part 1 Discussion

Yep, pretty much.

Posted in Repost / Retweet / Reblog Discussion

Retweets is simply a count the number of associated tweets.

@tweet.tweets.count

Posted in In-App Navbar Notifications Discussion

No, it says you tried to call the "post" method on a Post object. It's not a Comment, it's a Post.

Posted in In-App Navbar Notifications Discussion

If it works commented out, then you're probably throwing an error on that line. Read the logs to debug it. :)