Skip to content
This repository

Friendly_id and impressionist 1.0.1 not recording impressionable id #27

Closed
adanacs opened this Issue February 16, 2012 · 8 comments

6 participants

adanacs Antonio C Nalesso Moreira Bartek Rycharski pekpon Juan Artau Andrey D. Viana
adanacs

I saw in the other issue (#22) from a couple of months ago where this was working on rails 3.1.2. I have the same setup other than I have Rails 3.1.3, however it doesn't seem to be working for me - impressionist records the id just fine if I go to

.../article/13

but not

..article/title-of-article

I'm using Rails 3.1.3, Friendly_id 4.0.0-beta14 and impressionist 1.0.1

I'm wondering if you have any pointers for me on where to start looking and yes I have restarted the server :)

Bartek Rycharski

Same problem here. Any ideas?

Bartek Rycharski

before_filter :only => [:show] do |controller|
params[:id] = @video.id
end

impressionist :actions => [:show]

Kind of ugly but it works now.

pekpon

I have the same problem in Rails 3.2.0...

Juan Artau
JapArt commented May 11, 2012

I have the same problem with Rails 3.2.1

Andrey D. Viana

Yep, having the same issue here, using friendly_id with slugged. Rails 3.1.1

UPDATE
Well, my option was to change the behavior of impressionist.
First changed the column impressionable_id to string.
Modified impressionable.rb, in line 13 I added:

if self.respond_to?(:friendly_id)
  has_many :impressions, :as => :impressionable, :finder_sql => Proc.new {
    %Q{
      SELECT `impressions`.* FROM `impressions` WHERE `impressions`.`impressionable_id` = '#{slug}' AND `impressions`.`impressionable_type` = '#{self.class.to_s}'
    }
  }
else
  has_many :impressions, :as => :impressionable
end

This is not the best workaround, but works for me, maybe because I'm using impressionist in a "default" way for most of my models and controllers, but maybe not work in other situations. If someone know a better way to do that, please tell us :)

Another caveat, the specific SQL above sometimes return wrong, if for example you do @object.impressions.to_sql will return a wrong SQL, BTW @object.impressions will return the correct objects.

UPDATE2
The impressionist_count method broken with "select", this is baaad...
For now I've commented the lines 47 to 49 (the line numbers change with the add above) in the impressionist_count method to work for me, while cant find a workaround.

UPDATE3
For this situation, it needs to change to the impressionist_count method, set imps.all.size to imps.count (I dont know if I'm right, but this improve the SQL too)

Maybe someone find a better way to improve all this "behaviors" that are really dirty... thanks

pekpon
pekpon commented May 23, 2012

I do this, in the controller:

def show
@article = Article.find(params[:id])
impressionist(@article)
end

and its ok!

Andrey D. Viana

thanks

Juan Artau
JapArt commented May 24, 2012

Works for me too. Thanks!

Antonio C Nalesso Moreira acnalesso closed this June 10, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.