Chris Oliver


234,960 Experience
17 Lessons Completed
256 Questions Solved


Posted in Comments With Polymorphic Associations Discussion

Do you have the part that sets @article?

Posted in Comments With Polymorphic Associations Discussion

That looks correct. It sounds like the comment object is potentially the class and not the instance of the comment.

Does your controller have " authorize @comment" in it? And is your @comment variable set to an individual record?

Posted in 2 Factor Authentication

Oh cool, I'll definitely give it a look. I think that would be really awesome to support Google Authenticator, SMS, etc. I imagine this gem is designed to be fairly generic so you can support whichever you need.

Posted in Button Loading Animations with jQuery UJS Discussion

You'll just need to save those records to the database in the rake task and then load them up in the controller. That should be all you need to do!

ActiveRecord should always save UTC to the database unless you changed that. You can set the default time_zone in Rails to be PST and keep the activerecord timezone as UTC in order to have all form submitted times process in PST and then get saved as UTC.

The other thing is you could add some code either to your controller or model to set the timezone of the submitted attributes. Either approach should do the trick for you. Any form datetimes that you submit have to get cast to an actual Time object in Rails in anyways so you'd just be adjusting that process.

Posted in How do i collect the users emails into mandrill ?

Hey Ahmed,

Sorry for the slow reply on this one. You can add an after_create callback to your User model to add the email to the mailing list via their API. If you're using Mailchimp, you can use the Gibbon gem to do that.

I do something like this for GoRails when someone subscribes:

class User
    def add_to_mailchimp
      id: "a04070a071",
      email: {email: email},
      double_optin: false,
      merge_vars: {
        FNAME: first_name,
        LNAME: last_name,
        PLAN: (subscribed? ? "screencast-9" : ""),
    ) if Rails.env.production?
  rescue Gibbon::MailChimpError => e
    Rails.logger.error "Unable to add #{email} to mailchimp: #{e}"
# config/initializers/gibbon.rb
$gibbon = Rails.application.secrets.mailchimp_api_key
# config/secrets.yml
  mailchimp_api_key: MY_API_KEY

Posted in Integrating Braintree (and PayPal) Discussion

You got it Josh! I just added Braintree to the GoRails checkout process so I can make a screencast showing those steps for you as well.

That's a bit longer of a process that I haven't dove into just yet, but it's not too bad. Basically you'll need to add an extra step at the beginning to onboard your "SubMerchants". You'll ask for some information on them, send it over to Braintree and save the response. It'll give you some extra information that you can use for every transaction to make it processed on the sub-merchant's account. This is nice because it doesn't make you have an escrow feature and can happen directly on their account. They outline a lot of this here which is pretty similar to what I covered in my videos, but you'll have to build a couple things from scratch like the onboarding form for submerchants.

If you do need to have an escrow feature, you'll probably have a bit more work to do. You'll be the one accepting all the money and then paying things out from your bank account. I'm not sure about all the details on this but I'm sure you could also do this with Braintree. It might make your accounting a bit more complex, but is also very doable.

Posted in Deploy Ubuntu 14.04 Trusty Tahr Discussion

Yeah! I will do that. Generally with an individual server you want to set the number of workers equal to the number of CPUs on your VPS. Digital Ocean will show you how many CPUs you have on your machine in their dashboard and you can configure that workers variable and restart nginx to make that work.

I'll make a video on this in the future!

Posted in Deploy Ubuntu 14.04 Trusty Tahr Discussion

Hmm, I've had this a few times before. I think typically it is caused by an error in your application. Check your nginx and rails log files to see if you find any errors listed.

Posted in 2 Factor Authentication

Oh definitely! I had an account with a trivial password get hacked recently that made me think about how good a two factor auth tutorial would be for GoRails. Gonna get on that!

Also, do you know if this gem uses Twilio for a backend or is it generic in that it could support anything? I haven't looked at this much.

That's a really good question. As far as I know, you can't extend it or create a hold for a longer period of time.

Kickstarter simply saves the card to be charged at a future date and does not create holds on the cards. This is also bad for your customers because they can't actually use that money on their credit card in the meantime. You also don't necessarily know if the project will get fully funded, so it doesn't completely make sense to reserve that money from your users. The only downside to this is you'll see a portion of those pledges get declined when the project is fully funded. Kickstarter provides a "Fix payment" process when the pledge gets declined that you can read more about here:

Generally I'd say for crowd funding, you'll want to stick with Kickstarter's approach and not apply holds. You can then spend your time designing the failed pledge process so that that is really smooth when a card fails at that time.

Posted in 2 Factor Authentication

Yes! I've actually had this on my list to cover really soon. I'm going to try to squeeze it in after the Rails 5 videos I want to cover. This is becoming so common, it'd be really important to have a video on it!

Posted in Button Loading Animations with jQuery UJS Discussion

Yeah! That would be much better I think. You can write a rake task to do the sync and then use the whenever gem to schedule that to run on a nightly cron.

Posted in Comments With Polymorphic Associations Discussion

You might be needing to add a before_action for the destroy action called set_comment to set the @comment variable. It's saying that @comment is nil there so that would be it. You can just set @comment = Comment.find(params[:id]) in the before action and you should be set.

Posted in Performing calculations using scopes

Woot! :D

Posted in Comments With Polymorphic Associations Discussion

Hey Melanie!

For deleting comments, it might be useful to add a "resources :comments" to your routes that isn't inside another resources block. Then you can create a regular CommentsController with a destroy action like normal. That way you can delete any comment as long as you know the ID of it and not worry about whether it's a film or actor comment because that doesn't really matter when you're deleting a comment.

To add the delete link to each comment in the view, you can say: <%= link_to "Delete", comment, method: :delete %> and that will make a DELETE request to the /comments/1 url, which will trigger the destroy action.

That should do it! If you want to go over and above, you can also make it as a "remote: true" link so that you can return some JS to remove the item from the page to make it AJAXy and nicer to use.

Posted in Performing calculations using scopes

Yeah, if it's in the Attendance model where the scopes are, you can just use those methods directly without having "attendances" first so just planned_leave.

If you do it in the AttendanceSheet model, you'll need to preface the scopes with the attendances association attendances.planned_leave.

Posted in Performing calculations using scopes

Ah, so those methods should actually be class methods!

  (attendances.planned_leave.count + b.attendances.maternity_leave.count)  / b.attendances.count.to_f * 100

Note the self. there in the name. That makes it a class method which makes it work like a scope would.

This lets you do this:

The reason being is that when you access a has_many association, it returns a Relation object that functions more like the model class instead of an individual record.

Posted in Performing calculations using scopes

You can access the scopes through the attendances association if that's what you're asking. It should look like this:

# First we need a sheet
@attendance_sheet = AttendanceSheet.first

# Give me all the present attendances for that sheet
logo Created with Sketch.

Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

© 2020 GoRails, LLC. All rights reserved.