undefined method `explain' for #<ActiveReco

2020-07-09 09:30发布

问题:

I'm new to Ruby on Rails, but I have followed some tutorials and know my way around a little bit. I have generated some scaffolding and inserted data into a MySql database.

When navigating to index.html.erb I receive the error in the title

The controller is executing index

  def index
    @beers = Beer.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render :json => @beers }
    end
  end

And has this as a structure

Beer: id, brewer_id, name, price, score, color, brew_type, create_at, updated_at

RoR is working for other scaffolding I have created, and listing data. I updated the structure in mysql for the entity Beer, and it probably hasn't reflected changes in rails (dunno).

Do I need a different gem for connecting rails to a mysql db? Any advice on what to check for would be appreciated (:

回答1:

I'm guessing that you're using Rails 3.2 and that your Beer.all call is taking too long. From the 3.2 release notes:

Queries that take more than half a second to run are automatically explained in the development mode. This threshold, of course, can be changed.

And if we look at the MySQL adapter for Rails, there is no explain method. However, the MySQL2 adapter does understand explain.

First of all, you probably need less beer or some pagination. Then, you should try switching to the MySQL2 adapter; just install the new adapter by editing your Gemfile to use mysql2, run bundle to get the new stuff set up, and then change your database.yml to look more like this:

development:
  adapter: mysql2